从一个动态链表中删除一个结点就是将该系欸但从链表中分离出来,并不是真正的从内存中将该节点抹去,只需要改变连接关系就行了。 重点语句:
p1->next=p2->next;将下一个结点的地址赋给前一个结点的地址域即可。
例子:编写函数del,在单向链表中删除一个结点。 分析:本题目所需要的建立链表输出链表和前几节都一样,特殊的是del这个删除操作的函数。
#include<stdio.h> #include<stdlib.h> int main() { SNODE *creat(SNODE *head); void print(SNODE *head); SNODE *del(SNODE *head,int number); int score; SNODE *head; head=NULL; printf("输入若干学生信息"); head=creat(head); printf("现有信息"); print(head); printf("请输入要删除的学号:"); scanf("%d",&score); head=del(head,score); printf("新的信息为:"); print(head); return 0; } SNODE *del(SNODE *head,int number) { SNODE *p1,*p2;; if(head==NULL) { printf("链表为空"); return(head); } p1=head; while(number!=p1->id&&p1->next!=NULL) //p1指向的不是要找的结点,并且后面好友结点 { p2=p1; p1=p1->next; //p1后移一个 } if(number==p1->id) //找到要删除的结点 { if(p1==head) head=p1->next; else p2->next=p1->next; printf("delete:%d\n",number); } else printf("找不到该结点"); return (head); }其中几个函数和上一章节中的一个样子,这里就不明确指出了,如果需要就请参考上一节(包括创建链表和访问链表等)
