首页 > 其他分享 >构建链表

构建链表

时间:2024-03-17 21:56:35浏览次数:19  
标签:linklist 结点 return next 链表 构建 NULL

链表

 

typedef struct msgdata
{
    char msgtype;
    char text[27];
}link_data;

typedef struct msglist
{
 link_data data;
 struct msglist * next; 
}linknode,*linklist;

 

 

 

创建链表思路:

首先创建两个结点,即头结点和尾结点;

然后创建一个函数:在函数内创建一个结点,并分配内存空间;尾结点指向该结点,该结点的next指向空,并返回该结点的指针。返回的结点即为头结点

listhead = creatlist();
linklist listhead,listtail;
linklist creatlist(){
 linklist h;
 h=(linklist)(malloc(sizeof(linknode));
 listtail =h;
 h->next=NULL;
 return h;
}

插入结点思路:

创建一个函数,传入参数为结点的数据,在函数内部创建一个结点并分配内存空间,链表的最后一位next指向该结点,更新尾指针,

然后为尾结点赋值,并将尾结点的next指向空。成功返回0,失败返回-1。

int  insertlist(link_data x){
  linklist h=(linklist)(malloc(sizeof(linknode));
  if(h==NULL)
 {
       printf("error");
       return -1;
}
 listtail->next=h;
 listtail=h;
 h->data=x;
 h->next=NULL;
 return 0;
}

判断结点是否为空的思路:

传入一个结点,如果该节点的next指向为空则链表结束

int emptylist(linklist h){
  return h->next==NULL;}

读取并删除一个结点的思路:

该函数的参数为一个头结点,返回值为提取的结点。首先在函数内部判断该链表是否为空,如为空返回NULL;创建一个结点指向头结点的下一个结点,即第一个结点,也就是

我们要提取的结点,保存一下它的地址;然后让头结点指向该结点的下一个结点,然后判断该节点的下一个结点是否为空,如果为空,则提取该结点后,链表为空,要让尾结点

也指向头结点。最后返回提取的结点。

linklist deletelist(linklist h){
    if(emptylist(h)){
      return NULL;
}
linklist q;
q=h->next;
h->next=q->next;
if(q->next==NULL)
{
    linktail=h;
}
return q;
}

 

标签:linklist,结点,return,next,链表,构建,NULL
From: https://www.cnblogs.com/gaishuobulao/p/18079264

相关文章

  • 双向链表
    rt_inlinevoidrt_list_init(rt_list_t*l){l->next=l->prev=l;}/***@briefinsertanodeafteralist**@paramllisttoinsertit*@paramnnewnodetobeinserted*/rt_inlinevoidrt_list_insert_after(rt_list_t*l,rt_list_t*n){......
  • Mybatis-plus构建wrapper条件时出现索引越界异常Caused by: org.apache.ibatis.except
    项目场景:学习springboot整合mybatis-plus时通过构建器执行相关操作@AutowiredBookMappermapper;@Testvoidtest(){QueryWrapper<Book>wrapper=newQueryWrapper<>();wrapper.select("id","name","press")//只查询前三......
  • Python进行金融特征的估计和分类,及如何构建深度RNN
    8.5金融特征RNN的应用不仅限于原始价格或收益率数据,还可以包括附加特征以改进它的预测性能。以下Python代码向数据集中添加了典型的金融特征。In[77]:data=generate_data()In[78]:data['r']=np.log(data/data.shift(1))In[79]:window=20data['mom']=......
  • 链表 Linked List
    2024.3.15芝士wa参考视频:bilibli-数据结构-链表“印度小哥讲得真好”链表对于链表来说,存储数据需要两个部分,一是数据本身,二是指针,该指针指向下一个数据的地址,依次链接,直到最后一个元素,指针指向空(NULL)遍历的时间复杂度为O(n)插入的时间复杂度为O(n)删除的时间复......
  • 5.合并两个有序链表
    链表合并B站左程云讲解连接链表结构publicstaticclassListNode{publicintval;publicListNodenext;publicListNode(intval){this.val=val;}publicListNode(intval,ListNodenext){......
  • leetcode 21 合并两个有序链表
    https://www.bilibili.com/video/BV1xa411A76q?p=4&vd_source=cdfcf738e0429ec2cffe4778dd8dd0e4 #迭代#https://blog.csdn.net/m0_61661179/article/details/127205244classSolution:defmergeTwoLists(self,list1:Optional[ListNode],list2:Optional[List......
  • 数据结构(二)双链表---以题为例
    实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 ......
  • 关于nvim插件telescope-fzf-native在windows下未构建的问题解决
    关于nvim插件telescope-fzf-native在windows下未构建的问题解决首先进入文件夹(没有就自己创建注意文件夹名就是telescope-fzf-native.nvim)C:\Users\...\AppData\Local\nvim-data\site\pack\packer\start\telescope-fzf-native.nvim进入此路径的powershell或者cmd命令行,执行......
  • 滴水逆向笔记系列-c++总结4-41.new-delete-vector-42.链表
    第四十课c++8new-delete-vector1.内存空间复习在类外函数外的变量就是全局变量,程序一编译地址就已经确定了的临时数据,参数和局部变量就是在堆栈里而使用malloc函数动态申请的则是在堆里2.跟踪调试反汇编函数我们调用malloc函数申请内存,但是不是malloc一个函数完成整个......
  • 141. 环形链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/boolhasCycle(structListNode*head){structListNode*slow=head;structListNode*fast=head;while(fast&&fast->......