Loading... ### 链表删除元素 同插入类似,链表删除也分为三种情况,分别是在删除链表头部元素,删除链表中间元素以及在删除链表尾部元素。 ### 删除链表头部节点  删除头部节点元素非常简单,只需要将原头部节点的NEXT指向NULL,然后将表头指针指向原头结点的Next节点即可。 ### 删除链表尾部节点  删除尾部节点也非常简单,只要将尾部节点的前驱的Next节点设置为NULL,即可 ### 删除链表中间的节点  删除链表的中间节点的步骤是: * 定位当前节点为需要删除节点的前驱位置,当前节点的后驱就是即将删除的节点 * 将删除节点的Next 指向NULL * 将当前节点的Next指针执行将要删除的节点的Next节点。 ```cpp #include <stdio.h> #include <stdlib.h> struct Student { int num; char name[10]; int result[3]; struct Student *next; }; int main () { struct Student *creat(), *head, *heado;//创建链表 函数 void print ();//输出链表 函数 struct Student *deletes ();//删除链表结点 函数 int n ;//n为输入的学号 head = creat (); print (head);//输出 链表 while ( 1 ) { printf ("停止删除请输入:0\n"); printf ("请输入需要删除的学号:\n"); scanf ("%d", &n); if ( n == 0 ) { break; } heado = deletes (head, n); printf ("删除结点后的新链表为:\n"); print (heado);//输出删除链表中结点的新链表 } } struct Student *creat() { struct Student *a, *b, *p, *head; int n = 0; a = b = malloc (sizeof (struct Student)); head = NULL; printf ("请输入第1个成员数据,学号 名字 语文 数学 英语,这样的格式输入: \n"); scanf("%d %s %d %d %d", &a->num, &a->name, &a->result[0], &a->result[1], &a->result[2]); while (a->num != 0) { n++; if (n == 1) { head = a; } else { b->next = a; b = a; a = malloc (sizeof (struct Student)); printf ("请输入第%d个成员数据,学号 名字 语文 数学 英语,这样的格式输入: \n", n); scanf("%d %s %d %d %d", &a->num, &a->name, &a->result[0], &a->result[1], &a->result[2]); } } b->next = NULL; return head; } void print (struct Student *head) { struct Student *p; p = head; if (head != NULL) { while (p != NULL) { printf ( "%-5d %-5s %-5d %-5d %-5d",p->num, p->name, p->result[0], p->result[1], p->result[2]); printf ("\n\n"); p = p->next; } } } struct Student *deletes (struct Student *head , int n) { struct Student *p, *d; p = head; if (head!=NULL)//判断链表不为空链表 { while (p->num!=n)//寻找删除的结点位置 { d = p; p = p->next; } if (n == p->num)//如果找到则 { if (p == head)//判断该结点是否为头结点 { head = p->next;//当该结点为头结点则把头结点指向的下一个结点赋予给头结点,新的领头羊诞生 } else if( p->next == NULL) { d->next = NULL; //当需删除的结点为尾结点时,把尾结点的上一结点链接到NULL } else { d->next = p->next;//反之,把找的的结点的前一个结点链接到 找到的下一个结点的地址去 } } } return head; } ``` 最后修改:2021 年 05 月 31 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果文章有用,请随意打赏。