3. 找出链表中倒数第k个节点
来源:互联网 发布:二维数组赋值汉字 编辑:程序博客网 时间:2024/06/05 04:00
例子:
先看一个例子,链表为:1 2 3 4 5 6,倒数第2个节点就是5,倒数第一个节点就是6,以此类推。这里的链表有头节点,就是说head->next才是指向第一个节点的。链表的数据结构如下:
// ListNodetypedef struct LNode { int key; struct LNode *next;}
分析:
我们现在只知道链表的头指针,而且链表的长度未知,那么怎么办?
有一种方法可能会首先出现在我们的脑海中,就是先遍历链表,确定链表的长度length,然后倒数第k个节点就是,第(length - k + 1)个节点。当然这种方法可以解决问题,但是需要两次遍历链表,如果去面试,你这样回答面试官,那么这显然不是面试官想要的算法。那么有没有更好的能够一次遍历解决问题的方法呢?
答案是肯定的
1. 首先可以用p1,p2两个指针指向头节点:
2. 然后先让p2向前移动k(k=2)个节点:
3. 然后让p1,p2同时向前移动,当p2为空,即p2指向最后一节点的下一个节点(NULL)时,p1指向的节点就是倒数第个k个节点:
代码:
// find the last k-th node of listint findKey(LNode *head, int k) {LNode *p1 = head;LNode *p2 = head;// p2 move on k nodeswhile (k-- > 0)p2 = p2->next;// then p1 and p2 both move on until p2 == NULLwhile (p2) {p1 = p1->next;p2 = p2->next;}return p1->key;}
0 0
- 3. 找出链表中倒数第k个节点
- [Java] 找出链表中倒数第k个节点
- 找出单向链表中倒数第k个节点的算法
- 在链表中找出倒数第K个节点
- 找出链表中倒数第K个结点
- 单向链表_找出倒数第K个节点
- 找出单链表的倒数第k个节点
- 查找链表中倒数第K个节点
- 输出链表中倒数第k个节点
- 链表中倒数第k个节点
- 链表中倒数第k个节点
- 删除链表中倒数第k个节点
- 链表中倒数第K个节点
- 链表中倒数第k个节点
- 链表中倒数第k个节点
- 查找链表中倒数第k个节点
- 链表中倒数第K个节点
- 链表中倒数第k个节点
- 判断View是否显示在界面上
- 【iOS开发系列】iOS中常用函数表
- 《机器学习系统设计》(2)
- 王家林亲传《DT大数据梦工厂》第三讲Tuple、Array、Map与文件操作入门实战
- 使用Unity3D的50个技巧
- 3. 找出链表中倒数第k个节点
- Java 正则表达式详解
- 斯坦福《机器学习》Lesson7感想———1、最优间隔分类器
- dwz 右侧部分页面内容跳转(仅仅右侧里面的内容)
- JAVA学习第九天
- 黑马程序员——JAVA概述
- repo管理多个git仓库
- Qt QTimer测试定时精度
- Menu