`
ipython
  • 浏览: 293885 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

单链表的倒数第n个元素

阅读更多

看到网上的算法面试题,觉得很有趣。

 

输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。

 

弄法楚题目后,想了几种方法:

一。先遍历一次单链表,求其长度length,再第二次遍历 length-k 次

二。设置两个指针p1,p2 (p1=p2= p-> head 指向单链表的开始位置),让第一个指针跑k次 p1 = p1->next, 再一直让p1,p2 执行next,直到p1到达尾部:

    p1 = p2 = head;

    for (int i=0;i<k;i++,p1=p1->next);    

    while (p1)  { p1 = p1->next; p2 = p2->next}  

    return p2;

 

三。对单链表进行索引

 

方法一要遍历两次单链表,当然,如果该单链表的结构不发生变化时,可以保存长度,以备下一次用。

方法二是记录两个指针,这样是遍历一次还是两次链表我也说不清楚 。

方法三,参考数据库中,建立索引的方法, 把单链表的相关信息保存到硬盘。 相关信息有: 单链表的长度,每隔一段距离的开始位置(如保存第1个,第100,第1000个元素的指针), 这样,遍历时就不用从头到尾遍历一次啦。

 

 

方法三,如果该单链表的结构发生变化时,我们要手动维护这些数据,保持一致性。

 

方法一,方法二,网上有解决源代码

分享到:
评论

相关推荐

    找单链表倒数第N个元素

    很多大公司的面试题,查找单链表倒数第N个节点

    取单链表倒数第k个元素

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

    删除单链表的倒数第n个节点.cpp

    在本文中,我们将深入探讨如何实现C++编程中删除单链表倒数第n个节点的问题,这是一个典型的链表操作,对于理解和掌握数据结构中的链表至关重要。首先,我们需要了解单链表的基本概念,它的存储结构以及如何进行基本...

    单链表中查找倒数第n个元素2

    在这个问题中,我们需要在单链表中寻找倒数第n个元素。单链表由一系列节点组成,每个节点包含数据以及一个指向下一个节点的引用(或称为指针)。由于单链表不支持直接的反向遍历,所以寻找倒数第n个元素需要巧妙的...

    Leetcode 刷题(8)简单单链表: 删除链表倒数第N个元素

    题目要求我们从给定的单链表中删除倒数第N个元素。这个问题可以通过多种方式解决,其中最常用的是双指针法,也称为快慢指针法。这种方法在处理链表问题,尤其是在寻找环形链表的环入口或者解决类似问题时非常有效。 ...

    链表查找倒数第K个数

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

    删除链表中倒数第N个结点

    在这个问题中,我们需要处理一个特殊的链表操作,即“删除链表中倒数第N个节点”。这个任务在C++编程中尤为常见,因为它涉及到基本的指针操作和算法设计。 链表由一系列节点组成,每个节点包含数据和指向下一个节点...

    javaScript实现一个单链表,找到单链表中的倒数第n个节点.pdf

    在JavaScript中实现一个单链表并找到倒数第n个节点是数据结构和算法问题中的一个常见场景。这里我们将详细探讨如何实现这个功能。 首先,我们需要定义一个`Node`类来表示链表中的每个节点,它包含两个属性:`...

    单链表倒数第节点

    cout倒数第"个元素为"&lt;&lt;little-&gt;data; } void main() { int a[100]; int length; int l; int k=2; cout请输入单链表的长度:"; cin&gt;&gt;length; for(int i=0;i;i++) { a[i]=i+1; } cout; LinkList...

    仅遍历一次得到链表的倒数第n个结点

    当我们谈论“倒数第n个结点”时,这意味着在链表的末尾开始计数,向前数到第n个节点。例如,如果链表有10个节点,倒数第3个节点实际上是第7个节点。这个问题的关键在于如何高效地找到这个节点,而无需进行多次遍历或...

    python 删除链表中倒数第N个节点(csdn)————程序.pdf

    本题涉及的是如何在单链表中删除倒数第N个节点。这里提供了两种解决方案,分别称为解题思路一和解题思路二。 **解题思路一** 这个方法通过创建一个新的链表来实现。首先,遍历原链表计算其长度`count`。然后,根据...

    删除链表的倒数第 N 个结点(链表+栈)1

    给定一个单链表的头结点 `head` 和一个整数 `n`,我们需要找到链表的倒数第 N 个节点并将其删除,同时返回修改后的链表头结点。题目中还提到了进阶要求,即尝试使用一次遍历来实现。 首先,我们来看链表的定义。在 ...

    C#-Leetcode编程题解之第19题删除链表的倒数第N个结点.zip

    在本压缩包中,我们关注的是C#编程语言在解决LeetCode算法问题中的应用,特别是第19题——"删除链表的倒数第N个节点"。这是一道典型的链表操作题目,旨在考察程序员对链表结构的理解以及如何在单链表中进行高效的...

    线性单链表的演示详细操作

    - 删除尾节点:需要遍历链表找到倒数第二个节点,然后更新其指针域为NULL。 - 删除指定位置的节点:找到要删除节点的前一个节点,更新其指针域指向要删除节点的下一个节点。 3. 查找节点: - 遍历链表直到找到...

    数据结构之单链表

    包括如下操作:初始化、销毁、清空、求长度、遍历 指定位置插入和删除元素 ... 距离-标尺法:求单链表倒数第N个结点;求未知长度的单链表的中间结点; 建环/判断环存在 删除重复元素 合并两种有序单链表

    单链表的查找 从尾部开始用最小的空间来完成

    本话题聚焦于如何从链表的尾部开始查找倒数第N个节点,并且在实现过程中尽量减少空间的使用。在MFC(Microsoft Foundation Classes)框架下,我们可以利用C++语言的特性来高效地完成这一任务。 首先,我们需要理解...

    js代码-5.1 删除链表倒数第n个节点 快慢指针

    删除链表中的特定节点是一项常见的操作,特别是倒数第n个节点。在这个问题中,我们将使用快慢指针(又称龟兔赛跑算法)来解决这个问题。这是一种高效且简洁的方法,尤其适用于单链表。 首先,让我们理解什么是快慢...

    算法大全-面试题-数据结构.docx

    本文档涵盖了单链表目录的各种问题和解决方案,包括单链表反转、找出单链表的倒数第4个元素、找出单链表的中间元素、删除无头单链表的一个节点、两个不交叉的有序链表的合并、有个二级单链表的转换、一级单链表的...

    算法设计题new(1).docx

    问题:编写函数查找带头结点的单链表中倒数第4个元素。 解决方案:使用两个指针p1和p2,p1先走4步,然后p1和p2同时移动,直到p1到达链表的末尾,p2所指的结点就是倒数第4个元素。时间复杂度为O(n),空间复杂度为O(1...

    linux环境编译实现的单链表的常见操作

    工作之余,温习了以前的数据结构,重新写了单链表的一些常见操作,如尾插法建表,查找中间元素和倒数第N个元素,单链表的就地逆置,有序单链表的合并等.该程序在linux环境下编译通过.

Global site tag (gtag.js) - Google Analytics