用c语言实现插入和删除单链表
时间: 2023-10-27 16:04:54 浏览: 91
c实现单链表插入和删除
好的,我可以为您介绍一下单链表的插入和删除操作的 C 语言实现。
1. 插入操作
单链表的插入操作可以分为两种情况:
a. 在链表头部插入新节点
这种情况下,我们需要新建一个节点,并将该节点插入到链表头部。下面是具体实现的代码:
```
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* insertNodeAtHead(ListNode* head, int val) {
ListNode* newHead = (ListNode*)malloc(sizeof(ListNode));
newHead->val = val;
newHead->next = head;
return newHead;
}
```
b. 在链表某个节点后插入新节点
这种情况下,我们需要找到待插入的节点,然后插入新节点。下面是具体实现的代码:
```
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* insertNodeAfter(ListNode* head, int val, int insertAfter) {
ListNode* curr = head;
while (curr != NULL && curr->val != insertAfter) {
curr = curr->next;
}
if (curr == NULL) {
return head;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = curr->next;
curr->next = newNode;
return head;
}
```
2. 删除操作
单链表的删除操作也可以分为两种情况:
a. 删除链表头部节点
这种情况下,我们需要将指向链表头部节点的指针向后移动一位,然后删除原头部节点。下面是具体实现的代码:
```
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* deleteNodeAtHead(ListNode* head) {
if (head == NULL) {
return NULL;
}
ListNode* newHead = head->next;
free(head);
return newHead;
}
```
b. 删除链表中某个节点后的节点
这种情况下,我们需要找到待删除节点的前一个节点,然后将该节点的 next 指针指向待删除节点的下一个节点,最后删除待删除节点。下面是具体实现的代码:
```
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* deleteNodeAfter(ListNode* head, int deleteAfter) {
ListNode* curr = head;
while (curr != NULL && curr->val != deleteAfter) {
curr = curr->next;
}
if (curr == NULL || curr->next == NULL) {
return head;
}
ListNode* toBeDeleted = curr->next;
curr->next = curr->next->next;
free(toBeDeleted);
return head;
}
```
希望这些代码能帮到您,如果您有其他问题或者不清楚某个细节,可以继续向我提问。
阅读全文