删除节点
链表的节点删除有两种情况
一、删除头节点
将头结点变为第二个节点即可。
二、删除非头节点
将要删除的节点的前一个节点指向到要删除的节点的下一个节点。
#include <stdio.h>
//定义结构体
struct Test
{
int data;
struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{
struct Test *piont = head;
while(piont != NULL){
printf("%d ",piont->data);
piont = piont->next;
}
putchar('\n');
}
struct Test *delLinkNode(struct Test *head,int data)
{
struct Test *point = head;
if(point->data == data){
head = head->next;
printf("deletet succeed!\n");
return head;
}
while(point->next != NULL){
if(point->next->data == data){
point->next = point->next->next;
printf("deletet succeed!\n");
return head;
}
//跳到下一节点
point = point->next;
}
printf("delete faulat!\n");
return head;
}
int main()
{
//定义结构体变量
struct Test *head = NULL;
struct Test t1 = {1,NULL};
struct Test t2 = {2,NULL};
struct Test t3 = {3,NULL};
struct Test t4 = {4,NULL};
struct Test t5 = {5,NULL};
struct Test new = {100,NULL};
//指向对应节点地址形成链表
t1.next = &t2;
t2.next = &t3;
t3.next = &t4;
t4.next = &t5;
head = &t1;
//输出
printLink(head);
head = delLinkNode(head, 1);
printLink(head);
head = delLinkNode(head, 3);
printLink(head);
return 0;
}
执行结果: