当前位置:首页 > 经验 >

单链表如何判断是不是尾节点(单链表最后一个节点判断条件)

来源:原点资讯(www.yd166.com)时间:2022-11-04 00:06:53作者:YD166手机阅读>>

数组与链表是数据结构最基础的两种,其他的诸如hash表、树、队列、栈等都是基于这两种数据结构实现,上面两篇文章介绍了数组的特性及相关的面试题,下面介绍链表;

结点

链表是由结点构成的,所以先看看链表的结点结构是怎么样的;

结点由两部分构成,一部分是结点所存储的数据,另一部分是结点相关联的结点的指针,java程序员可以理解为引用。

这里的引用可能是一个,也可能是两个,如果是一个则指向后面的结点,如果是两个则分别指向后面的和前面的结点;

链表也是一种线性表;

单链表如何判断是不是尾节点,单链表最后一个节点判断条件(1)

链表的特点

跟数组相比,链表具有如下特点(从存储与访问角度分析):

  • 链表不需要连续内存,整体来讲对内存比较友好;
  • 需要额外存储节点引用,但一般来讲当数据大小远大于引用的大小(一般是int型)时,这种额外开销并不算大;
  • 根据某个结点可以直接访问到其后继结点或前继结点(双向链表)
  • 虽然时线性表,结点之间也是有顺序的,但是根据位置访问元素时间复杂度很高;
  • 链表是由多个结点构成,但一般只存储头结点或者头尾结点,元素不支持随机访问,只能顺序遍历访问。
  • 通常来讲链表的插入和删除比数组高效,但也得分情况,后面详细讨论。
链表的常规操作

查找元素

查找第K个元素,时间复杂度为O(n); 只能从头开始遍历查找

插入元素

在某个元素A之后插入一个元素B,时间复杂度为O(1);伪代码如下:

单链表:

B.next = A.next

A.next = B

双向链表:

A.next.pre = B //需要判断A.next!=null

B.next = A.next

B.pre = A

A.next = B

删除元素

删除元素A后面的元素,伪代码如下:

单向链表:

A.next = A.next.next //需要判断A.next!=null

双向链表:

A.next.next.pre = A

A.next = A.next.next

上面提到的插入删除元素的时间复杂度为O(1)时在特定条件下,假如换一个条件,比如单链表删除A结点,但并不知道A结点前面的结点,所以需要先查找指向A的结点,然后才能删除,这样时间复杂度就为O(n);

通常来讲,双向链表更有利于在比较广的适用条件下进行插入删除操作,比如删除A元素,很容易得到A前面的元素与后面的元素,删除操作时间复杂度O(1)

单链表如何判断是不是尾节点,单链表最后一个节点判断条件(2)

循环链表

循环链表是一种比较特殊的链表,普通链表的尾结点的next指向null,而循环链表指向的是头结点,关于循环链表的判断在下一篇的“链表相关面试题”中讲解

链表操作注意事项

链表虽然并不复杂,但是链表相关的代码非常容易出错,所以对于手写链表的编程题一般侧重考察面试者的逻辑思维能力与严谨性。

下面总结几个易错点:

  • 空指针的判断

涉及到任何一个结点都需要考虑其是否为空结点,或者其next是否为空结点

  • 指针丢失

要修改某个指针时,需要考虑这个指针的当前值是否会被用到,如果是,则应该先保留下来再修改;

  • 指针错误

由于逻辑不严谨,导致指针所指向的值不是自己以为的值。多写,多练;培养严谨的思维。

下一篇会收集常见的链表编程题,分享给大家;

单链表如何判断是不是尾节点,单链表最后一个节点判断条件(3)

栏目热文

怎么找单链表节点(如何确认链表节点)

怎么找单链表节点(如何确认链表节点)

福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指...

2022-11-04 00:41:37查看全文 >>

单链表各个节点的关系(单链表的中间节点)

单链表各个节点的关系(单链表的中间节点)

一:相关概念(1)什么是链表官方定义:链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接...

2022-11-04 00:27:00查看全文 >>

单链表找中间的节点(在链表中查找节点)

单链表找中间的节点(在链表中查找节点)

想法:返回单链表的中间节点:采用双指针方法,慢指针走一步,快指针走2步,当快指针走到头,那么慢指针所在的位置就是链表的中...

2022-11-04 00:29:10查看全文 >>

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表单链表的创建分为头插入法和尾插入法两种,两者并无本质上的不同,都是利用指针指向下一个结点元素的方式进行逐个创建,只...

2022-11-04 00:31:59查看全文 >>

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

单链表的定义链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。线性表...

2022-11-04 00:24:09查看全文 >>

如何确认链表节点(链表如何判断是否为尾节点)

如何确认链表节点(链表如何判断是否为尾节点)

数据结构有顺序存储和链式存储两种存储方式。顺序存储的数组可以使用下标随机访问,但插入操作比较麻烦,且需要整块的内存,另外...

2022-11-04 00:43:50查看全文 >>

单链表查找特定值(单链表的查找并计数)

单链表查找特定值(单链表的查找并计数)

数组中取值可以根据下标获取指定的值,但链表不行,链表中逻辑相邻的元素,在物理上不一定是相邻的。链表中取值只能从首元结点开...

2022-11-04 00:04:49查看全文 >>

单链表中间节点(单链表中各节点是否连续)

单链表中间节点(单链表中各节点是否连续)

单链表是一种线性数据结构,与顺序表占据一段连续的内存空间不同,链表是用一组地址任意的存储单元来存储数据,每个存储单元分散...

2022-11-04 00:25:29查看全文 >>

单链表如何查找中间结点(如何求链表中的中间节点)

单链表如何查找中间结点(如何求链表中的中间节点)

部分数据结构请看常见Java问题及笔试题(二十一),这里只列出主要方法与测试用例!!!寻找单链表的中间节点,最简单的思路...

2022-11-04 00:14:56查看全文 >>

单链表怎么找到上一个节点(链表的节点图解)

单链表怎么找到上一个节点(链表的节点图解)

给定一个单链表,判断其中是否有环,在网上搜集了一些资料,然后总结一下大概可以涉及到的问题,以及相应的解法。首先,关于单链...

2022-11-04 00:32:16查看全文 >>

文档排行