C语言中如何实现单链表删除指定结点

 更新时间:2022年07月13日 09:45:50   作者:nefu_lmy  
这篇文章主要介绍了C语言中如何实现单链表删除指定结点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

单链表删除指定结点

在单链表中删除指定的结点。这里单链表是用尾插法建立的,因为尾插法输出的顺序与输入的顺序是相同的。

#include <bits/stdc++.h>
using namespace std;
 
typedef struct node
{
    int data;
    struct node *next;
}no;
 
int main()
{
    no *head,*tail,*p,*r,*q;
    head=new no;
    head->next=NULL;
    tail=head;
    int n,k;
    printf("一共要输入的数: ");
    scanf("%d\n",&n);
    //尾插法建立单链表
    for(int i=0;i<n;i++)
    {
        cin>>k;
        p=new no;
        p->data=k;
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    //接下来是删除操作
    int m;
    printf("输入要删除的数: ");
    scanf("%d",&m);
    p=head;//让p指针从头结点开始遍历,要注意的是,头结点是没有数值的哦!
    while(p->data!=m&&p->next!=NULL)//循环查找要删除的结点
    {
        r=p;
        p=p->next;//把p的下一个结点给p,所以p就不是原来的p了,原来的p变成了r
      if(p->data==m)//因为头结点没有数值,所以一开始就让p=p->next是对的
      {
          r->next=p->next;//将要删除结点的前一个结点指向它的下一个结点(原本是要指它的,现在指向它的下一个结点了)(r是要删除结点的前一个结点)  
          delete(p);
      }//注意,这里的p->next已经和第38行的p->next不一样了,它是38行的下一个结点了
    }
    q=head->next;
    for(int i=0;i<n-1;i++)
    {
        printf("%d ",q->data);
        q=q->next;
    }
    return 0;
}

测试一:一共要输入的数:5

              1 2 3 4 5

              要删除的数:5

              输出:1 2 3 4

测试二:一共要输入的数:5

              1 2 3 4 5

              要删除的数:1

              输出: 2 3 4 5

测试三:一共要输入的数:5

              1 2 3 4 5

              要删除的数:2

              输出:1 3 4 5

链表的删除结点(各种方法)

先建立链表(代码在最后)

链表中删除第i个结点

int main()
{
? ? int i;
? ? Node *p,*head,*k;
? ? head=setlink();
? ? scanf("%d",&i);
? ? int v=1;
? ? for(p=head->next;p!=NULL;k=p,p=p->next) ?
? ? {
?? ??? ?if(v==i)break;
?? ??? ?else{
?? ??? ??? ?v++;
?? ??? ?}
?? ??? ? ??
? ? }
?? ??? ?k->next=p->next;
?? ?
?? ? delete(p);
?? ? ? ?for(p=head->next;p!=NULL;p=p->next)
?? ??? ? ? printf("%d ",p->id);
?? ? return 0 ;
}

删除与链表中与a相同的结点

int main()
{
?? ?int a;
?? ?Node *p,*q,*heada,*k;
?? ?heada=setlink();
?? ?scanf("%d",&a);
?? ?for(p=heada->next;p!=NULL;k=p,p=p->next) ?
?? ?{
?? ??? ?if(p->id==a)
?? ??? ?{
?? ??? ??? ?q=p;
?? ??? ??? ?k->next=p->next;
?? ??? ??? ?p=k->next;
?? ??? ??? ?delete(q);
?? ??? ?}
?
?? ?}
?? ?for(p=heada->next;p!=NULL;p=p->next)
?? ??? ?printf("%d ",p->id);
?? ?return 0 ;
}

删除链表中重复元素

int main()
{
?? ?Node *p,*q,*heada,*k,*ptr;
?? ?heada=setlink();
?? ?for(p=heada->next;p!=NULL;p=p->next) ?
?? ?{
?? ??? ?k=p;
?? ??? ?for(q=p->next;q!=NULL;k=q,q=q->next)
?? ??? ?{
?? ??? ?if(p->id==q->id)
?? ??? ?{
?? ??? ??? ?ptr=q;
?? ??? ??? ?k->next=q->next;
?? ??? ??? ?q=k;
?? ??? ??? ?free(ptr);
?? ??? ?}
?? ??? ?}
?? ?}
?? ?for(p=heada->next;p!=NULL;p=p->next)
?? ??? ?printf("%d ",p->id);
?? ?return 0 ;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • C语言数组与地址、数组名到底是什么详解

    C语言数组与地址、数组名到底是什么详解

    在写代码的时候,我们经常用到数组,那么有没有想过数组名是什么呢?这篇文章主要给大家介绍了关于C语言数组与地址、数组名到底是什么的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • C++实现连连看消除算法

    C++实现连连看消除算法

    这篇文章主要为大家详细介绍了C++实现连连看消除算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++?分割字符串数据的实现方法

    C++?分割字符串数据的实现方法

    这篇文章主要介绍了C++?分割字符串数据的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • c语言中十进制转二进制显示小工具的实现代码

    c语言中十进制转二进制显示小工具的实现代码

    本篇文章是对c语言中十进制转二进制显示小工具的实现代码进行了详细的分析的介绍,需要的朋友参考下
    2013-05-05
  • 详解C++中的vector容器及用迭代器访问vector的方法

    详解C++中的vector容器及用迭代器访问vector的方法

    使用迭代器iterator可以更方便地解引用和访问成员,当然也包括vector中的元素,本文就来详解C++中的vector容器及用迭代器访问vector的方法,需要的朋友可以参考下
    2016-05-05
  • C++实现简单的HTTP服务器

    C++实现简单的HTTP服务器

    这篇文章主要为大家详细介绍了C++实现简单的HTTP服务器的相关资料,感兴趣的朋友可以参考下
    2016-05-05
  • C++双向循环列表用法实例

    C++双向循环列表用法实例

    这篇文章主要介绍了C++双向循环列表,实例分析了C++双向循环列表的创建、输出、添加、删除、移动的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C/C++读取大文件数据方式详细讲解

    C/C++读取大文件数据方式详细讲解

    这篇文章主要介绍了C语言/C++读取大文件数据的完整方式过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • C++回溯法实例分析

    C++回溯法实例分析

    这篇文章主要介绍了C++回溯法,实例讲述了回溯法的原理与实现方法,最后给出了回溯法解决八皇后的实例,需要的朋友可以参考下
    2014-09-09
  • C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator)

    C++迭代器介绍(iterator、const_iterator、reverse_interator、const_rev

    这篇文章主要介绍了C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论

?


http://www.vxiaotou.com