`

找到单向链表的倒数第N个元素

阅读更多
找到单向链表的倒数第N个元素,如何在空间时间消耗上做到最小。

通常的做法是遍历一边得到长度,然后遍历第二遍,取得对应元素。
这种做法时间消耗是链表长度的2倍 - N。

或者消耗空间节省时间的方式,创建数组,遍历链表,将元素放入数组中。
这种做法时间消耗和空间消耗都是链表长度。

那么有没有更好的方式。

1.创建一个指针。
2.遍历链表,当顺序是2N的倍数时,用指针记录位置。
3.当遍历结束时,指针之后(链表长度 % 2N - N)个元素即是单向链表的倒数第N个元素。
时间消耗是链表长度 + (链表长度 % 2N - N)
空间消耗是指针的大小。

声明变量 point,
声明变量 current = 链表第一个元素
声明变量 size = 0
while(current != null){
  size++
  if ( size % 2n==0) {
    point=current
  }
current = current -> next
}

声明变量 result,
for (i=0; i < size % 2n - n; i++) {
  result = point -> next
}
打印 result
分享到:
评论

相关推荐

    链表查找倒数第K个数

    链表功能的一个扩展延伸,查找倒数第K个元素,是某年考研题

    取单链表倒数第k个元素

    处理单链表的问题时,有时我们需要找到链表中的特定位置的元素,例如“取单链表倒数第k个元素”这个问题。这个问题在面试中经常出现,因为它能够考察开发者对链表操作的理解和编程能力。 ### 算法描述 要找到...

    怎样找到链表倒数第k个元素

    题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 分析:使用两个指针,low,fast,先把fast的指针指向第k个元素,然后low和fast同时向后遍历,当fast遍历到结尾时,low...

    查找链表中倒数第K个节点

    查找链表中倒数第K个节点,源代码验证通过,两种查找方法。

    找出链表倒数第n个节点元素的二个方法

    这种方法首先遍历整个链表一次,得到链表的总节点数m,然后找到倒数第n个节点实际上是找到第m - n + 1个节点。这个方法的思路与方法一类似,只是执行步骤稍有不同。下面是这种方法的Java代码实现: ```java public ...

    python实现获取单向链表倒数第k个结点的值示例

    本篇将详细讲解如何使用Python实现获取单向链表倒数第k个结点的值,并通过实例分析相关操作技巧。 首先,我们需要定义链表的节点类`Node`,它包含一个数据项`item`和一个指向下一个节点的引用`next`。节点的初始化...

    数据结构 链表 查找倒数第N个节点的值 查找中间节点的值

    ### 数据结构:链表——查找倒数第N个节点与中间节点 #### 一、基础知识回顾 在深入了解本文档中的代码之前,我们首先简要回顾一下链表的基础知识。 **链表**是一种线性表的数据结构,其特点是通过指针连接各个...

    c语言-c语言编程基础之leetcode题解第19题删除链表的倒数第N个结点.zip

    这道题目要求我们在单向链表中找到倒数第N个节点并将其删除,而不需要预先知道链表的长度。 首先,我们需要理解链表的基本操作,如创建、插入、遍历和删除节点。在C语言中,链表节点通常通过结构体来定义,例如: ...

    python-leetcode面试题解之第19题删除链表的倒数第N个结点.zip

    删除链表的倒数第N个节点的关键在于找到这个特定的节点。一种直观的方法是遍历链表两次,但这种方法的时间复杂度为O(2n),效率较低。为了优化,我们可以使用双指针法,只需遍历链表一次,时间复杂度降为O(n)。 具体...

    C语言实现输出链表中倒数第k个节点

    接着,我们有一个辅助函数 `construct`,它接受一个整型数组 `array`,并根据数组内容构造一个单向链表。该函数创建一个虚拟头节点 `dummy`,然后遍历数组,为每个元素创建一个新节点,并将其链接到链表中。最后返回...

    剑指Offer(Python多种思路实现):链表中倒数第k个节点

    解题思路一:为了实现只遍历链表一次就能找到倒数第k个节点,我们可以定义两个指针。让第一个指针先向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离...

    C语言单向链表的基本操作12个

    删除尾部节点需要遍历找到倒数第二个节点;删除中间节点需要找到前一个节点并更新其指针。 4. **打印链表**: 遍历链表并逐个打印节点的数据,通常从头指针开始,通过每个节点的指针移动到下一个节点,直到遇到NULL...

    华为机试 高级题 链表的整合

    给你一个链表,节点有值域,计数器(表示值出现的次数,初始化为1),指针域,节点的值有重复的,去除重复的值,修改相应节点的计数器。这样做的好处就是节省的很多存储空间。 对即将参加华为机考的同学有非常大的帮助...

    cpp代码-输入一个链表,输出该链表中倒数第k个结点。

    链表是一种线性数据结构,其中每个元素(节点)包含数据以及指向下一个元素的引用。在这个问题中,我们需要设计一个算法,给定一个链表的头节点和整数k,返回链表中倒数第k个节点。 首先,我们定义链表节点的数据...

    li-yazhou#algorithm-primer#015-链表中倒数第k个结点1

    * 问题:* 1. 索引单向链表中的元素* 2. 边界问题* 思路:* 1. 顺序遍历* 2. trick,两个前后间隔相差 k 的指针顺序遍历整个单向链表到末

    实验报告2 链表倒置问题.doc

    然后是第二个元素与倒数第二个元素交换,以此类推,直到遍历到链表的中间位置。 3. **终止条件**:当交换次数达到链表长度的一半时停止。 ##### 3.2 数据结构 定义链表的节点结构如下: ```c typedef struct LNode ...

    数据结构之链表,C#链表;数据结构之链表,C#链表

    链表分为单向链表和双向链表,C#中的LinkedList是双向链表,每个节点有前驱和后继节点。 链表的基本操作包括: 1. **创建链表**:可以通过初始化一个新的LinkedList实例来创建链表。 ```csharp LinkedList&lt;int&gt; ...

    创建双向链表_双向链表_

    如果删除的是尾节点,需要找到倒数第二个节点并更新其`next`指针为`NULL`。其他情况下,需要同时更新前后节点的指针。 5. 查找节点:双向链表可以从前向后或后向前查找目标节点,这取决于查找的方向和需求。查找时...

Global site tag (gtag.js) - Google Analytics