链表c语言删除结点(【C语言编程】写一个函数del,删除动态链表中指定的结点)

:暂无数据 2026-07-19 02:20:09 :0

链表c语言删除结点(【C语言编程】写一个函数del,删除动态链表中指定的结点)

大家好,链表c语言删除结点相信很多的网友都不是很明白,包括【C语言编程】写一个函数del,删除动态链表中指定的结点也是一样,不过没有关系,接下来就来为大家分享关于链表c语言删除结点和【C语言编程】写一个函数del,删除动态链表中指定的结点的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

【C语言编程】写一个函数del,删除动态链表中指定的结点

  #include 《stdio.h》
  #include 《malloc.h》
  #include 《conio.h》
  typedef struct node //定义节点
  {
   int value;
   struct node* next;
   }note;
note* head = NULL;
  void del (note** head, int k)//删除链表
  {
   note* pp;
   note* pt;
   note* pq;
   pp = *head;
   if ((*head)-》value == k)//如果头结点的值等于k,删除头结点
   {
   *head = (*head)-》next;
   return;
   }
   while(pp-》value != k)
   {
   pt = pp;
   pq = pp-》next;
   pp = pq;
   }
pt-》next = pp-》next;//删除结点
  }
  void insert(note** head, int q)//建立链表
  {
   note* pp;
   note* pt;
   note* p = (note*)malloc(sizeof(note));
   p-》value = q;
   p-》next = NULL;
   pp = *head;
   if (*head==NULL)
   {
   *head=p;
   return;
   }
   while(pp-》next!=NULL)
   {
   pt = pp-》next;
   pp = pt;
   }
pp-》next = p;
  }
  void print(note* head)//打印链表
  {
   note* pp;
   while(head!=NULL)
   {
   printf("%d ", head-》value);
   pp = head-》next;
   head = pp;
   }
  }
  int main()
  {
   int i;
   int n,k,value;
   scanf("%d %d",&n, &k);
   for(i=0; i《n; i++)
   {
   scanf("%d", &value);
   insert(&head, value); //把head的地址传过去
   }
   del(&head, k);
   print(head);
   getch();//随意按个键退出界面
   return 0;
}

c语言中删除链表中的一个节点

temp=p;
p=p-》next;
temp-》next=NULL;
这三句存在问题,temp=p,让temp指向p所指向的节点,p=p-》next,p指向后移
temp-》next=NULL,让temp的后继为空,这里出了问题,链表从temp指向的节点断开,相当于删除p之后的所有节点。
应该先判断p是不是最后节点
if(p-》next==NULL)
如果是,只好去找p的前趋pre,让pre-》next=NULL,free(p)
如果不是最后节点,将p的后继节点数值域复制给p,然后将p的后继节点删除,等同与删除p
p-》data=p-》next-》data;
p-》next=p-》next-》next;
free(p);

C语言如何删除链表头节点

这种删除方法是头节点存放值的,这样可以清楚的看到是否删除掉了头节点。

用p保存头节点  p=head;

head指向下一个节点,成为新的头节点 head=p-》next;

释放原来的头节点  free(p);

#include《iostream》
#include《stdio.h》
#include 《stdlib.h》 
void printList(struct node *head);
struct node* delHead(struct node *head);
struct node{
    int data;
    struct node* next;
};
int main(){
      int i;
    struct node *tail,*head,*p;
    //尾插法插入数据 
    p=(struct node*)malloc(sizeof(struct node));
    p-》data=0;
    tail=head=p;
    tail-》next=NULL;
    for(i=1;i《10;i++){
        p=(struct node*)malloc(sizeof(struct node));
        tail-》next=p;
        p-》data=i;
        p-》next=NULL;
        tail=p;
    }
    printList(head);
    head=delHead(head);
      printList(head);
      system("pause");
      return 0;
}
//删除头结点 
struct node* delHead(struct node *head){ 
    struct node *p = head;
      head=p-》next;
      free(p); 
      return head;
}
//打印链表 
void printList(struct node *head){ 
    struct node *p = head;
    while (p != NULL){  
        printf("%i ", p-》data);
        p = p-》next;
    }
    printf("\n");
}

c语言 删除链表的某个节点

temp=p;
p=p-》next;
temp-》next=NULL;
这三句存在问题,temp=p,让temp指向p所指向的节点,p=p-》next,p指向后移
temp-》next=NULL,让temp的后继为空,这里出了问题,链表从temp指向的节点断开,相当于删除p之后的所有节点。
应该先判断p是不是最后节点
if(p-》next==NULL)
如果是,只好去找p的前趋pre,让pre-》next=NULL,free(p)
如果不是最后节点,将p的后继节点数值域复制给p,然后将p的后继节点删除,等同与删除p
p-》data=p-》next-》data;
p-》next=p-》next-》next;
free(p);

C语言关于链表删除某个节点的问题,不知道写法,麻烦指点

struct node *delete(struct node* head)//删除函数
{
printf("请输入要删除的学生姓名");
char k;
scanf("%s", k);
struct node *pre = NULL;
struct node *q   = head;
while (q) {
if (strcmp(q-》data.name, k) == 0){
if (pre)
pre-》next = q-》next;
else 
head = q-》next;
free(q);
break;
}
pre = q;
q = q-》next;
    }
return head;
}

创建链表,并删除链表中指定的结点的数据,用C语言实现

#include 《stdio.h》
#include 《time.h》
#include 《stdlib.h》

typedef struct node
{
 int a;
 struct node *next;
} NODE;

void main()
{
 NODE * create(), *head;
 NODE * SearchNode(NODE *head, int n);
 void display(NODE *head);
 NODE * DeleteNode(NODE *head, int n);
 int n;
 
 head = create();
 if (head != NULL)
 {
  printf ("链表内容:\n");
  display(head);
  printf ("输入要删除的结点:");
  scanf ("%d", &n);
  head = DeleteNode(head, n);
  if (head != NULL)
   display(head);
  else
   printf ("链表被删除空了!\n");
 }
 else
  printf ("链表为空!\n");
}

NODE * create()
{
 NODE *head, *p, *q;
 int a;
 
 head = q = NULL;
 srand ((unsigned) time (NULL));
 while (1)
 {
  a = rand () % 100;
  if (a != 30)
  {
   p = (NODE *) malloc (sizeof (NODE));
   p-》a = a;
   if (head == NULL)
    head = p;
   else
    q-》next = p;
   q = p;
  }
  else if (30 == a)
   break;
 }
 if (q != NULL)
  q-》next = NULL;
 
 return head;
}

void display(NODE *head)
{
 NODE *h;
 
 h = head;
 while (h != NULL)
 {
  printf ("%3d", h-》a);
  h = h-》next;
 }
 putchar (10);
}

NODE * SearchNode(NODE *head, int n)
{
 NODE *prev, *h;
 
 h = head;
 while (h != NULL && h-》a != n)
 {
  prev = h;
  h = h-》next;
 }
 
 return prev;
}

NODE *DeleteNode(NODE *head, int n)
{
 int count = 0, flag = 0, num = 0;
 NODE *prev, *h;
 
 h = head;
 while (h != NULL)
 {
  if (h-》a == n)
   count++;
  h = h-》next;
  num++;
 }
 if (count == 0)
 {
  printf ("抱歉,没有找到要删除的结点!\n");
  exit (0);
 }
 else
 {
  if (num == count)
   count--;
  while (head-》a == n && count != 0)
  {
   h = head;
   head = head-》next;
   free (h);
   count--; 
   flag = 1;
  }
  if (count != 0 )
  {
   while (count--)
   {
    prev = SearchNode(head, n);
    h = prev-》next;
    prev-》next = h-》next;
    free (h);
   }
  }
  else if (head-》a == n)
  {
   printf ("链表被删除空了!\n");
   free (head);
   exit (1);
  }
 }
 
 return head;
}

c语言 删除链表头节点 望大神指教

1、对于有头结点(该结点不存储数据)的链表,删除某个结点容易操作。

int EraseNode(LIST *head,type data) {
    LIST *q,*p;
    for(p = head; p-》next; p = p-》next) {
        if(p-》next-》data == data) { /* 满足删除条件 */
            q = p-》next;
            p-》next = q-》next;
            free(q);
            return 1;
        }
    }
    return 0; /* 没有找到满足条件的结点,失败返回 */
}

2、对于没有头结点的链表,操作方法有些不同。

LIST *EraseNode(LIST *head,type data) { /* 返回链表头指针 */
    LIST *q,*p;
    if(head-》data == data) { /* 先处理头结点 */
        q = head;
        p = q-》next;
        free(q);
        return p;
    }
    for(p = head; p-》next; p = p-》next) {
        if(p-》next-》data == data) { /* 满足删除条件 */
            q = p-》next;
            p-》next = q-》next;
            free(q);
            return head;
        }
    }
    return head; /* 没有找到满足条件的结点,失败返回 */
}

C语言,单向链表 不知道前驱指针,如何删除某一节点 情况考虑详尽一些!

p非尾结点:用p的下一节点q代替p(p-》data=q-》data,p-》next=q-》next),然后删除q节点。
p是尾结点:从头结点开始遍历整个链表直到倒数第二个节点q,令q-》next=NULL,然后删除p节点。

以上就是我们为大家找到的有关“链表c语言删除结点(【C语言编程】写一个函数del,删除动态链表中指定的结点)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

链表c语言删除结点(【C语言编程】写一个函数del,删除动态链表中指定的结点)

本文编辑:admin

本文相关文章:


vlookup公式怎么使用(vlookup函数的使用方法)

vlookup公式怎么使用(vlookup函数的使用方法)

今天给各位分享vlookup函数的使用方法的知识,其中也会对vlookup函数的使用方法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月7日 05:50

概率密度函数的性质(分布函数和概率密度)

概率密度函数的性质(分布函数和概率密度)

本篇文章给大家谈谈概率密度函数的性质,以及分布函数和概率密度对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月19日 14:30

trim函数用于删除空格(trim函数的使用方法)

trim函数用于删除空格(trim函数的使用方法)

各位老铁们好,相信很多人对trim函数用于删除空格都不是特别的了解,因此呢,今天就来为大家分享下关于trim函数用于删除空格以及trim函数的使用方法的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月11日 07:10

找不到datedif函数(excel中的datedif这个函数在哪里)

找不到datedif函数(excel中的datedif这个函数在哪里)

“找不到datedif函数”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看找不到datedif函数(excel中的datedif这个函数在哪里)!

2026年9月1日 13:40

计算机excel函数公式(Excel常用函数公式)

计算机excel函数公式(Excel常用函数公式)

大家好,如果您还对计算机excel函数公式不太了解,没有关系,今天就由本站为大家分享计算机excel函数公式的知识,包括Excel常用函数公式的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年8月24日 11:40

plot函数怎么定义颜色(matlab中plot函数一共能调用多少种颜色)

plot函数怎么定义颜色(matlab中plot函数一共能调用多少种颜色)

各位老铁们好,相信很多人对plot函数怎么定义颜色都不是特别的了解,因此呢,今天就来为大家分享下关于plot函数怎么定义颜色以及matlab中plot函数一共能调用多少种颜色的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧

2026年8月24日 04:30

sendmessage函数使用方法(SendMessage()函数的 第二、三、四个参数是什么 怎么用)

sendmessage函数使用方法(SendMessage()函数的 第二、三、四个参数是什么 怎么用)

本篇文章给大家谈谈sendmessage函数使用方法,以及SendMessage()函数的 第二、三、四个参数是什么 怎么用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年8月23日 19:20

round if函数公式怎么用(round和IF函数怎么用)

round if函数公式怎么用(round和IF函数怎么用)

大家好,关于round if函数公式怎么用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于round和IF函数怎么用的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮

2026年7月31日 06:50

c语言函数调用简单例子(C语言是怎么进行函数调用的)

c语言函数调用简单例子(C语言是怎么进行函数调用的)

这篇文章给大家聊聊关于c语言函数调用简单例子,以及C语言是怎么进行函数调用的对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年7月16日 05:40

php函数参数传递方式三种(php中构造函数的参数是接口类型,在实例化一个对象时这个参数怎么传)

php函数参数传递方式三种(php中构造函数的参数是接口类型,在实例化一个对象时这个参数怎么传)

大家好,如果您还对php函数参数传递方式三种不太了解,没有关系,今天就由本站为大家分享php函数参数传递方式三种的知识,包括php中构造函数的参数是接口类型,在实例化一个对象时这个参数怎么传的问题都会给大家分析到,还望可以解决大家的问题,下

2026年6月30日 09:40

更多文章:


form表单制作(为什么制作的form表单会在网页显示中多出一行)

form表单制作(为什么制作的form表单会在网页显示中多出一行)

大家好,如果您还对form表单制作不太了解,没有关系,今天就由本站为大家分享form表单制作的知识,包括为什么制作的form表单会在网页显示中多出一行的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 09:10

teammate(teammate,company,partner)

teammate(teammate,company,partner)

各位老铁们,大家好,今天由我来为大家分享teammate,以及teammate,company,partner的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧

2026年10月11日 06:10

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

其实javascript arraybuffer的问题并不复杂,但是又很多的朋友都不太了解javascript可以把base64编码转换成二进制代码吗求示例代码!,因此呢,今天小编就来为大家分享javascript arraybuffer的

2026年10月11日 04:00

text函数公式(excel中round和text函数的区别是什么)

text函数公式(excel中round和text函数的区别是什么)

“text函数公式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看text函数公式(excel中round和text函数的区别是什么)!

2026年10月11日 03:50

pascal编程软件(介绍一下pascal语言!)

pascal编程软件(介绍一下pascal语言!)

大家好,如果您还对pascal编程软件不太了解,没有关系,今天就由本站为大家分享pascal编程软件的知识,包括介绍一下pascal语言!的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 02:40

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

本篇文章给大家谈谈google chrome打不开,以及chrome浏览器打不开怎么回事 浏览器打不开的处理方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了

2026年10月11日 02:00

websocket整合springboot(Springboot整合Websocket遇到的坑)

websocket整合springboot(Springboot整合Websocket遇到的坑)

大家好,websocket整合springboot相信很多的网友都不是很明白,包括Springboot整合Websocket遇到的坑也是一样,不过没有关系,接下来就来为大家分享关于websocket整合springboot和Springbo

2026年10月11日 01:40

小米官方首爆miui14(miui14耗电严重官方回应)

小米官方首爆miui14(miui14耗电严重官方回应)

各位老铁们好,相信很多人对小米官方首爆miui14都不是特别的了解,因此呢,今天就来为大家分享下关于小米官方首爆miui14以及miui14耗电严重官方回应的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 00:40

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

本篇文章给大家谈谈drawerlayout,以及android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月10日 19:20

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

大家好,今天小编来为大家解答以下的问题,关于xor四位数怎么运算,单片机怎样用C语言实现4个数字间的异或这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 17:50

最近更新

thinkpade470c加内存条(thinkpad e470c内存条是什么牌子如果要添加4g内存什么牌子比较好)
2026-10-11 09:00:03 浏览:0
frontpage的主要功能(frontpage是什么)
2026-10-11 08:40:18 浏览:0
热门文章

打印机m7400(m7400打印机清零方法)
2026-08-29 07:50:01 浏览:5
acrobat各版本区别(Acrobat XI Pro与 Acrobat PRO DC什么区别)
2026-08-29 22:30:20 浏览:2
联想y510p怎么升级(联想y510p换cpu)
2026-08-17 03:30:04 浏览:2
标签列表