实现单链表的删除指定结点,需要进行以下几个步骤:
-
首先判断需要删除的结点是不是链表的头结点,因为头结点是没有前驱结点的,所以需要特殊处理。
-
然后遍历链表查找需要删除的结点,查找时需要保存当前结点和前驱结点,以便完成删除操作。
-
找到需要删除的结点后,将前驱结点的next指针指向需要删除结点的下一个结点,从而完成删除操作。
以下是C语言实现单链表删除指定结点的完整代码:
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 删除指定结点函数
void delete_node(Node *head, int num) {
Node *p = head->next;
Node *last = head;
// 遍历链表查找需要删除的结点
while (p) {
if (p->data == num) {
last->next = p->next;
free(p);
printf("Delete the node with value %d\n", num);
return;
} else {
last = p;
p = p->next;
}
}
printf("The node with value %d is not found\n", num);
}
int main() {
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
// 创建链表
for (int i = 5; i >= 1; i--) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = i;
node->next = head->next;
head->next = node;
}
// 输出链表
printf("Before deletion: ");
Node *p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 删除结点
delete_node(head, 3);
// 输出链表
printf("After deletion: ");
p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
以上是一个简单的单链表删除指定结点的例子。假设链表元素为1,2,3,4,5,需要删除值为3的结点。运行结果如下:
Before deletion: 1 2 3 4 5
Delete the node with value 3
After deletion: 1 2 4 5
可以看到,删除后链表中值为3的结点已经被成功删除。如果需要删除的结点不存在,则会提示“The node with value x is not found”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中如何实现单链表删除指定结点 - Python技术站