单链表的删除

从一个动态链表中删除一个结点就是将该系欸但从链表中分离出来,并不是真正的从内存中将该节点抹去,只需要改变连接关系就行了。
重点语句:

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);
 }

其中几个函数和上一章节中的一个样子,这里就不明确指出了,如果需要就请参考上一节(包括创建链表和访问链表等)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值