C语言实现的头插法和尾插法建立单链表的代码
时间: 2024-09-30 17:07:06 浏览: 6
在C语言中,我们可以使用结构体表示链表节点,并通过指针进行头插法(即在列表头部插入节点)和尾插法(在列表尾部插入节点)。以下是这两种方法的基本示例:
### 头插法
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新的节点
Node* newNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 头部插入
void insertAtHead(Node** head, int data) {
Node* newNode = newNode(data);
newNode->next = *head;
*head = newNode;
}
// 示例
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
insertAtHead(&head, 1);
insertAtHead(&head, 2);
insertAtHead(&head, 3);
printList(head); // 输出:3 2 1
return 0;
}
```
### 尾插法
```c
// 尾部插入
void insertAtTail(Node** head, int data) {
Node* newNode = newNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
int main() {
Node* head = NULL;
insertAtTail(&head, 1);
insertAtTail(&head, 2);
insertAtTail(&head, 3);
printList(head); // 输出:1 2 3
return 0;
}
```
在这两个示例中,我们首先定义了一个`Node`结构体,然后分别实现了头插法和尾插法的函数。注意,在实际项目中,为了防止内存泄漏,`malloc`返回的指针应该始终被`free`。