c语言线性链表插入删除代码
时间: 2024-09-14 17:06:02 浏览: 16
在C语言中,线性链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。对于线性链表的插入和删除操作,需要特别注意指针的正确操作,以保持链表的连续性。
以下是线性链表插入和删除操作的C语言示例代码:
插入操作:
```c
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
// 在链表的第pos个位置插入新节点
void insert(Node** head, int data, int pos) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = NULL;
if (pos == 0) {
// 插入到链表头部
newNode->next = *head;
*head = newNode;
} else {
// 插入到链表中间或尾部
Node* temp = *head;
for (int i = 0; temp != NULL && i < pos - 1; i++) {
temp = temp->next;
}
if (temp != NULL) {
newNode->next = temp->next;
temp->next = newNode;
} else {
// 如果pos大于链表长度,则不插入
free(newNode);
}
}
}
```
删除操作:
```c
// 删除链表中第pos个位置的节点
void delete(Node** head, int pos) {
Node* temp = *head;
Node* prev = NULL;
if (temp != NULL && pos == 0) {
// 删除头节点
*head = temp->next;
free(temp);
} else {
// 遍历到要删除的节点的前一个节点
for (int i = 0; temp != NULL && i < pos; i++) {
prev = temp;
temp = temp->next;
}
if (temp == NULL || prev == NULL) {
// 如果位置不合法,不进行删除
return;
}
// 删除节点
prev->next = temp->next;
free(temp);
}
}
```
这两个函数分别实现了在链表中插入和删除节点的功能。在使用时需要注意传入正确的链表头指针以及要操作的位置。