链表中倒数第k个节点(剑指Offer 第14 题)
来源:互联网 发布:联通语音网络类型 编辑:程序博客网 时间:2024/06/06 08:36
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
解题思路:
主要介绍两种方法:
1. 链表逆序+前第k个节点(容易想到的)
2. 快慢指针
1 . 链表逆序 + 前第k个节点
这里面难度主要就是前面的链表逆序,先介绍它!
如上图,我们在遍历链表的同时,将链表进行逆序!主要分为以下几步:
public ListNode converseList(ListNode head){ ListNode newHead = null;//逆序链表的头节点,一开始为null,对应到图中的1指向的null。 while(head != null){//遍历原链表 ListNode newNode = head;//将遍历到的节点1先存起来(若不存,后面head很快就被覆盖掉了!) head = head.next;//下一个节点(此时,节点1对于原链表任务已经结束,可以任意操作节点1了!) newNode.next = newHead;//将节点1指向null newHead = newNode;//将节点1设置为反转链表的头节点。 } return newHead; }
上面的注释,详细介绍了一个周期,后面的每个节点都是这个周期操作!
那么,后面找第k个就很简单了, 代码就不了附!
2 . 快慢指针
原理,见上面的图,应该能够一眼看明白了!
下面主要结合代码看看具体怎么实现!
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { int count = 1;//快指针计数 ListNode fast = head;//快指针 ListNode slow = head;//慢指针 while(fast != null){ if(count > k){//此时,快指针到第k个节点,慢指针开始行动 slow = slow.next; } fast = fast.next; count++; } if(count<=k)//循环结束后,要判断特殊情况,k值大于链表长度的情况 return null; else return slow; }}
End
阅读全文
1 0
- 链表中倒数第k个节点(剑指Offer 第14 题)
- 剑指offer(16):链表中倒数第k个节点
- #剑指offer--(16)链表中倒数第k个节点
- 剑指Offer之链表中倒数第K个节点
- 来自《剑指offer》 链表中倒数第k个节点
- 【剑指offer系列】 链表中倒数第k个节点___15
- 剑指offer--15.链表中倒数第k个节点
- 剑指Offer :寻找链表中倒数第K个节点
- 剑指offer 链表中倒数第k个节点
- 剑指offer-链表中倒数第K个节点-php
- 剑指offer-链表中倒数第K个节点
- 剑指offer-14.链表中倒数第k个节点
- 剑指offer---链表中倒数第k个节点
- 剑指offer--链表中倒数第K个节点
- 剑指Offer----链表中倒数第k个节点
- 剑指offer——链表中倒数第k个节点
- 剑指Offer——链表中倒数第K个节点
- 剑指Offer--14.链表中倒数第k个节点
- “字符串碎片”之c++中输出小数点后指定位数
- spring整合hibernate细节
- NYOJ99 欧拉图
- plsql远程连接数据库
- Facebook SDE onsite面经
- 链表中倒数第k个节点(剑指Offer 第14 题)
- 对线性回归、逻辑回归、各种回归的概念学习
- MySQL 学习随笔
- C++笔试题(十五).富途证券 & 猎豹移动 & TP-LINK
- 【STL】容器调用时机
- Uva10791 质因数分解
- JS的设计模式
- 【STL】常用算法
- sdnu1007