剑指offer----链表中倒数第K个结点
来源:互联网 发布:ubuntu wayland 编辑:程序博客网 时间:2024/05/26 16:00
输入一个链表,输出该链表中倒数第K个结点。从1开始计数,即该链表的尾节点是倒数第一个结点。
思路:
一、链表是单向链表,只能从头结点往后依次遍历,倒数第K个结点,也就是从头结点开始的n-(k-1)个结点。但是需要先遍历一遍得到链表长度,然后在找第n-k+1的K结点。
二、
(1)方法一需要对链表进行二次遍历,如果我们使用两个指针,让走快的指针走到最后一个结点的时候走的慢的指针刚好走到倒数第K个。
(2)也就是说快指针比慢指针要早走k-1步。程序设计时先让快指针走k-1步,然后两个一起走,直到快指针的下一个为空则停止。此时快指针在尾节点的位置,慢指针在倒数第k个位置。
问题:
需要考虑的(1)当输入的头节点为空时;
(2)K <=0时
(3)看k大于链表的长度
都返回空
代码:
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head == null || k <=0) return null; ListNode faster = head; ListNode slower = null; for (int i = 0; i < k - 1; i++) //让快指针先走k-1步 {if(faster.next != null){ faster = faster.next;}elsereturn null; //若k大于链表的长度 返回null } slower = head; while(faster.next != null) //让快指针的下一个节点是否为空来做判断,为空时说明快指针已经走到尾节点了,此时慢指针在倒数第K个位置,并将慢指针返回 { faster = faster.next; slower = slower.next; } return slower; }}
0 0
- 剑指Offer之链表中倒数第k个结点
- 剑指offer-15:链表中倒数第k个结点
- 剑指offer系列源码-链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点
- 剑指Offer之 - 链表中倒数第k个结点
- 剑指offer:链表中倒数第k个结点(链表)
- 剑指Offer-链表中倒数第k个结点
- 剑指offer——链表中倒数第k个结点
- 链表中倒数第k个结点(剑指offer)
- 《剑指offer》链表中倒数第k个结点
- 剑指 offer:链表中倒数第k个结点
- 剑指offer—链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点-java
- 《剑指offer》——链表中倒数第k个结点
- [剑指offer-1517]链表中倒数第k个结点
- 剑指offer 链表中倒数第k个结点
- 剑指offer-链表中倒数第k个结点
- 剑指Offer--015-链表中倒数第k个结点
- UIScrollViewDelegate
- ajax页面局部刷新
- ArtTemplet模板 参数传递 动态绑定
- 自定义TextView实现文字伞动效果
- POP3与IMAP的区别
- 剑指offer----链表中倒数第K个结点
- Python目录树
- python步进切片
- 在ObjectARX的类定义中使用__declspec(dllimport)的危险
- <meta http-equiv=“X-UA-Compatible” content=“IE=edge”>不添加元素,有什么不同
- 设置下拉列表框的javascript方式进行实现
- java面试题总结之JavaSE基础
- (转)软件测试 (二) 六年软件测试感悟
- Topcoder 639 Div2