首页 > 其他分享 >嵌入式-删除链表节点

嵌入式-删除链表节点

时间:2022-12-06 22:55:55浏览次数:38  
标签:head struct 嵌入式 链表 printf Test next data 节点

删除链表节点可以分为三种:删除头节点,删除中间节点和删除尾节点

#include<stdio.h>
#include<stdlib.h>

struct Test
{
  int data;
  struct Test * next;
};

printfLink(struct Test * head)
{
   while(head!=NULL)
   {
      printf("%d\n",head->data);
      head=head->next;
   }
   putchar('\n');
}

struct Test * InsertBeforeNode(struct Test *head,int data,struct Test * new)
{
    struct Test * p=head;
   if(p->data==data)
   {
     new->next=head;
     return new;
   }
    while(p->next!=NULL)
    {
       if(p->next->data==data)
       {
          new->next=p->next;
          p->next=new;
          printf("insert OK\n");
          return head;
       }
       p=p->next;
       printf("no insert\n");
    }
    return head;
}

void InsertAfterNode(struct Test *head,int data,struct Test *new)
{
    struct Test * p=head;
    while(p!=NULL)
    {
        if(p->data==data)
        {
           new->next=p->next;
           p->next=new;
        }
        p=p->next;
    }
}

struct Test * DeleteNode(struct Test *head,int data)
{
   struct Test * p=head;
   if(p->data==data)
   {
      head=head->next;
      free(p); 
      return head;
   }
   while(p->next!=NULL)
   {
      if(p->next->data==data)
      {
         p->next=p->next->next;
         return head;
      }
      p=p->next;
   }
   if(p->next==NULL)
   {
      if(p->data==data)
      {
         
      }
   }
   return head;
}


int main()
{
   struct Test *head=(struct Test *)malloc(sizeof(struct Test));
   head->data=1;
   struct Test new1={2,NULL};
   struct Test new2={3,NULL};
   struct Test new3={4,NULL};
   struct Test new4={5,NULL};
   printf("no insert:\n");
   printfLink(head);

   InsertAfterNode(head,1,&new1);
   InsertAfterNode(head,2,&new2);
   InsertAfterNode(head,3,&new3);
   printf("after insert 1,2,3:\n");
   printfLink(head);

   struct Test *hp1=InsertBeforeNode(head,2,&new4);
   printf("after insert 5:\n");
   printfLink(hp1);

   struct Test *hp2=DeleteNode(hp1,1);
   printf("after delete head Node\n");
   printfLink(hp2);

   printf("after delete Middle Node\n");
   struct Test *hp3=DeleteNode(hp2,2);
   printfLink(hp3);

   printf("after delete end Node\n");
   struct Test *hp4=DeleteNode(hp3,4);
   printfLink(hp4);
   return 0;
}

 

输出结果:

no insert:
1

after insert 1,2,3:
1
2
3
4

insert OK
after insert 5:
1
5
2
3
4

after delete head Node
5
2
3
4

after delete Middle Node
5
3
4

after delete end Node
5
3



标签:head,struct,嵌入式,链表,printf,Test,next,data,节点
From: https://www.cnblogs.com/zxtang/p/16961674.html

相关文章

  • day38 操纵节点和表单
    更新dom节点写一些div标签 <divid="id1">​</div><h1>标题</h1><divid="father"><pid="p1">p1</p><pclass="p2">p2</p><p>p3</p></......
  • BOM操作、DOM操作、查找标签、操作节点、获取值操作、class与css操作、事件、事件实战
    目录BOM操作DOM操作查找标签操作节点获取值操作class与css操作事件事件实战案例jQuery类库标签对象与jQuery对象BOM操作BOM(BrowserObjectModel)是指浏览器对象模型,它使......
  • BOM操作、DOM操作、查找标签、操作节点、获取值操作、class与css操作、事件、事件实战
    目录BOM操作与DOM操作BOM(浏览器对象模型)DOM操作查找标签操作节点获取值操作class与css操作事件事件实战案例jQuery类库标签对象与jQuery对象BOM操作与DOM操作BOM(Browser......
  • 链表从指定前方插入节点
    在链表的前方插入节点#include<stdio.h>structTest{intdata;structTest*next;};printfLink(structTest*head){while(head!=NULL){p......
  • LEEP节点无线链路质量评估实验
    一、实验目的理解节点通信链路质量的影响因素理解提升链路质量的一般方法学习TinyOS系统中CC2530/CC2538节点发送功率的设置体验不同发送功率、不同通信距离、不......
  • #yyds干货盘点# LeetCode程序员面试金典:移除重复节点
    题目:编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1,2,3,3,2,1]输出:[1,2,3]示例2:输入:[1,1,1,1,2]输出:[1,2]代码实现:classSolu......
  • ansible 清理k8s集群的node节点日志
    目录ansible清理k8s集群的node节点日志获取对应节点信息脚本删除各个节点的日志脚本ansible分发clear_docker_log.sh并做成计划任务ansible清理k8s集群的node节点日志......
  • 链表
    链表链表算法与数据结构目录这一节将着重知识讲解与代码实践链表的理论基础链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域......
  • 嵌入式开发工具链概述
    一、嵌入式系统软件开发流程高级语言编写的源代码文件——》交叉编译器——》目标文件——》链接器用目标机的汇编语言编写的源代码文件——》交叉汇编器——》目标文件——......
  • 拉链表
    CREATETABLE`policy`(`policy_no`varchar(30)NOTNULLCOMMENT'保单号',`identify_number`varchar(22)NOTNULLCOMMENT'身份证号',`insurance_amount`dec......