首页 > 其他分享 >单链表

单链表

时间:2023-05-05 22:11:49浏览次数:37  
标签:结点 单链 cur val next 链表 删除

单链表的每个结点,包含值和链接到下一个结点的引用字段。

//definition for singly-linked list.
struct SinglyListNode{
    int val;
    SinglyListNode *next;
    SinglyListNode(int x):val(x),next(Null){} //用头结点来表示整个列表
};

与数组不同,我们无法在常量时间内访问单链表中的随机元素。想知道第i个元素,需要从头结点逐个遍历,按照索引来访问元素平均花费O(N)时间,N为链表长度。

如访问第三个结点,我们需要使用头结点(23)中的next字段到达第二个结点(6),再次通过next访问第三个结点(15)。

A. 添加

用给定值初始化新的结点,将新的结点next链接到下一结点,再将当前结点的next链接到新结点。注意前后顺序,先让新来的结点有所指向(先给新来的画饼bushi

在链表开头添加新结点时,需要注意更新头结点(head)。

在链表末尾添加新结点时,初始化新结点cur,将cur的next-> NULL,遍历到链表尾部,直到结点的next为NULL,将该结点链接到cur。

B.删除

删除现有结点cur,先找到cur的上一结点prev和下一结点next,再将链接prev到next。

删除头结点时,可以直接将下一个结点分配为head。

删除最后一个结点时,找到next为NULL的结点cur,再将cur->NULL,删除最后的结点。

 

TMI:

评论区的其他方法:不需要找前序结点。

1.将当前结点的next结点赋值给当前结点,val=val->next;

2.此时有两个重复的结点,index->next=index->next->next;相当于删除了原来的next结点。

即将next结点的值保留给cur结点,再将next结点删除。

讨论:有人回复这条说这一方法没有区分结点的引用和结点对象本身。val=val->next;只是给了val一个新的引用ID,而并不能改变链表上指向val本身的链式结构,pre_node.next和node是两个不同的变量,因此改变node之后pre_node.next的值不变,链表结构也没有发生变化。

但是我感觉这样是可行的诶,如果val=val->next;只是为了赋值的话,虽然没有删除原结点,但是通过index->next=index->next->next;删去了后继结点,在值的体现上还是实现了同样的效果。不过原评论说第一步相当于把后继结点提前这一点,确实好像表达的不太对。

 

 

 

 

 

标签:结点,单链,cur,val,next,链表,删除
From: https://www.cnblogs.com/chordxx/p/17375517.html

相关文章

  • ds:带头结点的单链表与不带头结点的单链表区别
     写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。 一、带头结点的单链表头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据初始化:malloc申请空间后要L->next=NULL......
  • ds:单链表
    写在前边:单链表:1.带头结点的单链表:L头指针->头结点(data域不存数据元素,只指向下一个元素)->a1->a2->..->NULL2.不带头结点的单链表:L头指针->a1->a2...->NULL以上两种区别在于:无头结点的单链表在进行插入/删除元素时要对i=1的情况做特殊处理 一、带头结点的单链表基本操作#......
  • 【数据结构】链式型存储结构-循环单链表
    1 前言对于单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说,按照这样的方式,只能索引后继结点不能索引前驱结点。这样一来,不从头结点出发,这样就无法访问到全部结点。为了解决这个问题,我们只需要将单链表的尾结点的指针由空指针改为指向头结点......
  • 【数据结构】链式型存储结构-单链表
    1 前言线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置。比起顺序存储结构每个元素只需要存储一个位置就可以了。现在链式存储结构中,除了要存储数据信息外,还要存储它的后继元素的存储地址(指针)。也就是说......
  • c#-单链表
    namespaceMyLink;publicclassMyLinkedList{privateint_size{get;set;}publicclassMyTreeNode{publicintval{get;set;}publicMyTreeNodenext{get;set;}publicMyTreeNode(intval){this.val=val;......
  • java设计单链表
    packagelinked;/***@date2023/4/2622:51*@description单链表*/publicclassSingleLinkedList{privateintsize=0;privateNodehead;privateNodetail;publicstaticclassNode{privateObjectdata;privateNodenext;......
  • 单链表的实现
    链表的概念我们知道顺序表的储存方式是一片连续的空间里面储存数据而链表就不一样了,从这个图我们可以看到在一个链表里面有两个储存空间的部分,一部分是用以储存我们的数据,而另一部分储存的是一个结构体的地址,而这个地址指向的空间里面也有两个部分的储存空间用处和上面的一样,直到最......
  • 约瑟夫环问题---&解题方法 静态单链表&一维数组
      importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt();int[]ant=newint[150];for(int......
  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 带头节点的单链表的思路及代码实现
    带头节点的单链表的思路及代码实现(JAVA)一、什么是的单链表①标准定义单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)+指针(指示后继元素存储位置,元素就是存储数据的存储单......