`
ipython
  • 浏览: 289614 次
  • 性别: 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个节点

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

    19. 删除链表的倒数第N个节点 难度: 中等 题目分析: 链表中的题目,指针相当于免费资源,可以根据需要增加。双指针法、快慢指针法在环形链表,应用很多。 解法一: # 对于这种题目,循环结束条件设为快指针到达...

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

    单链表中查找倒数第n个元素2010-07-30通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。

    链表查找倒数第K个数

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

    单链表倒数第节点

    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...

    数据结构实验二(单链表基本操作)题目和源程序

    实验内容 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La。 (2)在La中第i个元素之前插入一个新结点。...(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)

    数据结构之单链表

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

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

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

    栈实现链表中的查找

    /* *实现算法查找单链表中的倒数第N个元素 *

    数据结构实验

    (即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。) 四、思考与提高 1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作? 2.如何将一个带头结点的单链表La分解成两个...

    LeetCode解题总结

    2.6 删除倒数第N个节点 2.7 成对交换链表元素 2.8 复制复杂链表 2.9 链表环相关问题 2.9.1 链表是否有环 2.9.2 链表环的入口 2.10 改变链表中的元素位置2.11 LRU Cache(设计题) 3. 字符串 3.1 判断字符串是否为...

    LeetCode判断字符串是否循环-Data-Structures-and-Algorithms:记录学习数据结构与算法的笔记

    删除链表倒数第 n 个结点 21: 合并两个有序链表 141: 判断链表中是否有环 206: 反转单链表 876: 求链表中间结点 题目分类 栈 20: 有效的括号 155: 最小栈 232: 用栈实现队列(todo) 844: 比较含退格的字符串 224: ...

    leetcode2-DataStructureDemo:数据结构学习。1、啊哈算法

    leetcode 2 DataStructureDemo 项目介绍 数据结构 + 算法练习。 1、啊哈 算法。...1、Java实现单链表,支持增删改查。...④变体3:查找第一个大于等于给定值的元素 ⑤变体4:查找最后一个小于等于给定值的元素

    世界500强面试题.pdf

    1.3.2. 输入一个单向链表,输出该链表中倒数第 k 个结点............................. 44 1.3.3. 输入一个已经按升序排序过的数组和一个数字.................................... 46 1.3.4. 输入一颗二元查找树,...

    StructuresandAlgorithms-Code:重温数据结构与算法,代码实践

    删除倒数第n个节点 两个单链表的公共节点 leetcode建议练习题号: 业界应用 如何实现LRU缓存淘汰算法 stack & queue 栈、队列 知识点 栈 队列 双端队列 优先队列:堆结构的实现 经典题 括号匹配 表达式求值(中缀...

    数据结构与算法.xmind

    设置两个指针p1、p2,让p2比p1快k个节点,同时向后遍历,当p2为空,则p1为倒数第k个节点 (-k+1+链表总数) % 链表总数 查询链表的中间节点 一个每次走1步,一个每次走两步,走两步的遍历完,...

    leetcode中文版-daily_algorithm::fire:算法进阶,由浅入深,欢迎加入一起共勉(Adailyalgorithm,Welcome

    删除链表倒数第 n 个结点 : 求链表的中间结点 栈 : 有效的括号 : 最小栈 : 基本的计算器 : 下一个更大元素(LeetCode 496) : 棒球比赛(LeetCode 682) : 比较含退格的字符串(LeetCode 844) 队列 : 基于数组的循环队列 ...

    leetcodeoj和leetcode-Algorithm:常用的数据结构和算法

    leetcode oj和leetcode 常用算法和数据结构实现:Talk is cheap, show me the code! 文件说明: JavaProj目录下均是我平常编写的来自剑指offer,leetcode,以及...输入一个链表,输出该链表中倒数第k个节点 实际上思想

    数据结构实验.zip

    (7)函数void MoveK1(HLink &H, int k),将单链表中倒数第k个结点移到第一个结点位置,注意:严禁采用先计算链表长度n再减k(即n-k)的方法; (8)函数void ReverseN2(HLink &H),将单链表的正中间位置结点之后的全部...

Global site tag (gtag.js) - Google Analytics