单链表中求倒数第几个节点
来源:互联网 发布:js 判断event 编辑:程序博客网 时间:2024/06/04 08:34
问题描述
在单链表中求出倒数第K个节点,要求快速。
方法一:利用链表的长度(不推荐)
此方法必须事先知道链表的长度,在有长度的信息链表中,此方法可行。
比如我之前的链表是这样的实现,参考博文:http://blog.csdn.net/dawn_after_dark/article/details/73610674此链表含有头节点,头节点含有长度信息,所以我们可以充分运用长度信息。先让指针指向第一个节点,然后head->value(链表的长度)-k,即可求出要走到倒数第K个需要走几步。
Node* findKthNode(int); //返回倒数第K个
实现
Node* LinkList::findKthNode(int k) { Node* first = head->next; if (k <= 0 || k > head->value) { cout << "输入索引非法,请输入合理索引!" << endl; return NULL; } int pace = head->value - k; for (int i = 1;i <= pace;i++) { //第一个指针先走K步 first = first->next; } return first;}
方法二:利用2个指针(推荐)
此方法只需2个指针即可,非常快,还容易理解。比如在操场上跑100米,小明跟小王赛跑,小王先跑20米,之后小明再跑,假设2人的速度一致,所以当小王到达终点时,小明正好在倒数20米处。所以,我们可以先让2个指针都先指向第一个节点,然后移动其中一个指针k步,之后让2个指针同步移动,直到第一个指针指向NULL,这时第二个指针就位于倒数第K个。
类的声明参考上面我给的博文,添加findKthNode函数。
Node* findKthNode(int); //返回倒数第K个
实现
Node* LinkList::findKthNode(int k) { Node* first = head->next; Node* second = head->next; if (k <= 0 || k > head->value) { cout << "输入索引非法,请输入合理索引!" << endl; return NULL; } for (int i = 1;i <= k;i++) { //第一个指针先走K步 first = first->next; } while (first) { //当第一个指针走完时,第二个指针正好指在倒数第K个 first = first->next; second = second->next; } return second;}
阅读全文
0 0
- 单链表中求倒数第几个节点
- 求链表倒数第几个节点
- 找第几个兄弟节点
- 寻找倒数第K个节点...
- 查找链表中倒数第K个节点
- 输出链表中倒数第k个节点
- 链表倒数第k个节点
- 求链表中倒数第K个节点
- 求链表倒数第k个节点
- 单链表中, 求倒数第K个节点
- 求链表的倒数第K个节点
- 求链表倒数第K个节点
- 求链表的倒数第K个节点
- coding - 求单链表倒数第k个节点
- 查找单链表中倒数第n个节点
- 单链表查找倒数K个节点
- 求链表中的倒数第K个节点
- 寻找倒数第K个节点...
- codeforces 666E Forensic Examination
- [Office][Excel][001]如何将一行数据拆成多行?
- 多线程访问共享数据同步原因
- hibernate一对多与多对一映射
- 学习淘淘商城第一百零八课(Mycat的读写分离)
- 单链表中求倒数第几个节点
- C++ 中一些零碎的知识点
- CF
- selvet的生命周期
- Hbase 热点(数据倾斜)问题解决方案---rowkey散列和预分区设计
- 用Caffe+python如何训练一个手写体数字数别模型
- 算法设计与分析(18)-- Reverse Nodes in k-Group(难度:Hard)
- 回顶部总结一
- 最小生成树 prim算法