单链表的插入与删除的c语言代码
时间: 2023-12-18 11:07:42 浏览: 15
c实现单链表插入和删除
单链表的插入和删除操作可以用以下的 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点的值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 单链表的插入操作
ListNode* insert(ListNode* head, int val) {
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
new_node->val = val;
new_node->next = NULL;
if (head == NULL) { // 如果链表为空,直接将新节点作为头结点
head = new_node;
} else { // 否则,将新节点插入链表尾部
ListNode* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
return head;
}
// 单链表的删除操作
ListNode* delete(ListNode* head, int val) {
if (head == NULL) { // 如果链表为空,直接返回空链表
return NULL;
}
ListNode* p = head;
ListNode* q = NULL; // q 是 p 的前驱节点
while (p != NULL && p->val != val) {
q = p;
p = p->next;
}
if (p == NULL) { // 如果没有找到值为 val 的节点,直接返回原链表
return head;
}
if (q == NULL) { // 如果要删除的是头结点,直接将头指针指向下一个节点
head = head->next;
} else { // 否则,将前驱节点的 next 指针指向 p 的下一个节点
q->next = p->next;
}
free(p); // 释放被删除节点的内存空间
return head;
}
int main() {
ListNode* head = NULL;
// 插入 1,2,3 三个节点
head = insert(head, 1);
head = insert(head, 2);
head = insert(head, 3);
// 删除值为 2 的节点
head = delete(head, 2);
// 输出链表中的所有节点
ListNode* p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
这段代码实现了单链表的插入和删除操作。在插入操作中,如果链表为空,则将新节点作为头结点;否则,将新节点插入链表尾部。在删除操作中,如果没有找到值为 val 的节点,则直接返回原链表;否则,将被删除节点从链表中删除,并释放其内存空间。
阅读全文