用c语音写出一个带头结点尾插法的链表程序
时间: 2024-09-20 10:08:54 浏览: 40
在C语言中,我们可以创建一个单向链表,并实现头插法和尾插法。首先,我们需要定义链表节点结构体(Node)以及链表头指针(LinkedList)。这里我仅给出头插法的基本实现,尾插法则稍作修改即可。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点并插入到链表头部
void insertAtHead(Node** head, int value) {
// 分配内存
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
// 设置新节点数据和下一个节点为当前头节点
newNode->data = value;
newNode->next = *head;
// 更新头指针
*head = newNode;
}
// 主函数示例
int main() {
// 初始化链表为空
Node* head = NULL;
// 插入元素到头部
insertAtHead(&head, 5);
insertAtHead(&head, 3);
insertAtHead(&head, 1);
// 打印链表
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
return 0;
}
```
对于尾插法,你需要在链表的最后添加节点,可以参考上述头插法,只需将 `insertAtHead` 函数内的部分修改为:
```c
// 尾部插入节点
void insertAtTail(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
if (*head == NULL) {
newNode->next = NULL;
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = NULL;
}
}
```
阅读全文