剑指offer面试题15 链表中倒数第k个结点
来源:互联网 发布:淘宝店铺首页如何设置 编辑:程序博客网 时间:2024/06/02 19:15
解题思路:
思路1:求链表中倒数第k个节点,也就是正数第n-k+1个结点(假设从1开始计数),此时最直观的做法就是从头开始遍历链表定位到这个第n-k+1个结点即可。但是这种做法需要遍历链表2次,第1次遍历需要求得链表中结点总数,第2次从表头开始找第n-k+1个结点。因此不是最佳解法。
思路2:比较好的做法就是利用双指针,只需遍历链表1次。可以这样考虑,让两个指针p1和p2一开始都指向链表表头,接着让指针p1比p2多走k-1步。然后,p1和p2同时移动,当p1移动至链表末尾时,p2此时正好指向倒数第k个结点处。还需注意一种特殊情况,当k大于链表长度时,即在链表中不存在倒数第k个结点,此时需要单独判断。
public class Solution {/** * 常规思路:链表中倒数第k个节点,也就数正数第n-k+1个节点(从1开始计数) * 此时直接从头开始遍历链表定位到这个节点即可,但是这种做法需要遍历节点2次 第1次遍历确定节链表的长度,第2次遍历找到对应节点 * @param head * @param k * @return */public ListNode FindKthToTail_simple_idea(ListNode head, int k) {// 链表不存在或者k不在合理的范围if (head == null || k <= 0) {return null;}// 从头到尾遍历链表,统计链表中节点个数int n = 0;ListNode p = head;while (p != null) {n++;p = p.next;}// 此时倒数第k个元素即为正数第n-k+1个int target = n - k + 1;int index = 1;p = head;while (index != n - k + 1) {index++;p = p.next;}return p;}class ListNode {public int val;public ListNode next = null;public ListNode(int val) {this.val = val;}}/** * 只遍历1次的解法是设置两个指针,因此这道题是一个双指针问题 * 先让指针p1比p2多走k-1步,然后两个指针一起走,当指针p1到达链表尾部时,指针p2正好指向 倒数第k-1个 * * @param head * @param k * @return */public ListNode FindKthToTail(ListNode head, int k) {if (head == null || k <= 0) {return null;}ListNode p1 = head;ListNode p2 = head;// 首先让p1走k-1步// 这里有种特殊情况,如果k大于链表的长度,则p1最终会指向nullint n = 1;while (n != k && p1 != null) {n++;p1 = p1.next;}if (p1 != null) {//在p1还在链表中的时候// 此时p1和p2以同时后移,直到p1到链表的尾节点,// 这里有一种特殊情况,若k大于while (p1.next != null) {p1 = p1.next;p2 = p2.next;}return p2;} else {return null;}}}
阅读全文
0 0
- 剑指offer面试题 链表中倒数第K个结点
- 【剑指offer】面试题15:链表中倒数第k个结点
- 剑指Offer:面试题15 链表中倒数第k个结点
- 《剑指Offer》面试题15:链表中倒数第k个结点
- 《剑指Offer》学习笔记--面试题15:链表中倒数第k个结点
- 剑指offer--面试题15:链表中倒数第K个结点--Java实现
- 【剑指Offer学习】【面试题15 :链表中倒数第k个结点】
- 剑指Offer面试题15(Java版):链表中倒数第K个结点
- 剑指offer-面试题15:链表中倒数第K个结点
- 剑指offer 面试题15: 链表中倒数第k个结点 题解
- 剑指offer之面试题15:链表中倒数第k个结点
- 剑指Offer----面试题15:链表中倒数第K个结点
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
- 剑指offer面试题15:链表中倒数第k个结点
- 剑指offer--面试题15:链表中倒数第k个结点
- 剑指offer面试题15(java版):链表中倒数第k个结点
- 剑指offer——面试题15:链表中倒数第k个结点
- 剑指Offer之面试题15:链表中倒数第K个结点
- 梁少峰大侠的巨作vue源码解读 react webpack
- wordpress判断语句
- Android图谱(个人记录)
- Python基础语法与C、JAVA差异点
- weka数据集下载
- 剑指offer面试题15 链表中倒数第k个结点
- Robot HDU
- eclipse安装反编译插件JadClipse
- SpringBoot简单Demo
- HTML5基础归纳(1)
- 网络安全人才短缺 可能成为产业发展的最大瓶颈
- install Docker
- springmvc下载excel表格,自定义文件名称 附带生成excel方法
- MaterialSpinner 下拉菜单