c语言链表创建与插入
时间: 2024-09-06 20:07:39 浏览: 66
在C语言中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。创建和插入链表是链表操作的基础。以下是如何在C语言中创建和插入节点的步骤:
### 创建链表
1. **定义节点结构体**:首先,定义一个结构体来表示链表的节点,通常包含一个数据域和一个指向下一个节点的指针。
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
```
2. **创建头节点**:通常情况下,链表的头节点是一个哑节点(dummy node),即它的数据域不存储有效数据,这样可以简化插入和删除操作。
```c
Node* head = (Node*)malloc(sizeof(Node)); // 分配头节点的内存
if (head != NULL) {
head->next = NULL; // 初始化头节点的指针域为NULL
}
```
### 插入节点
插入节点通常有三种情况:在链表头部插入、在链表尾部插入和在链表中间插入。
1. **在链表头部插入节点**:
```c
Node* insertAtHead(Node* head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data; // 设置新节点的数据
newNode->next = head->next; // 新节点指向原头部节点
head->next = newNode; // 头节点指向新节点
}
return head;
}
```
2. **在链表尾部插入节点**:
```c
Node* insertAtTail(Node* head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data; // 设置新节点的数据
newNode->next = NULL; // 新节点指向NULL,因为它是尾部节点
Node* current = head;
while (current->next != NULL) { // 遍历到链表的最后一个节点
current = current->next;
}
current->next = newNode; // 将最后一个节点的next指向新节点
}
return head;
}
```
3. **在链表中间插入节点**:
```c
Node* insertAfter(Node* prevNode, int data) {
if (prevNode == NULL) {
return head; // 如果前一个节点为NULL,则不执行插入
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data; // 设置新节点的数据
newNode->next = prevNode->next; // 新节点指向原前一个节点的下一个节点
prevNode->next = newNode; // 原前一个节点指向新节点
}
return head;
}
```
在所有情况中,插入节点后都应当返回头节点的指针,以便链表可以正确地被遍历或操作。
阅读全文