/*链表中的倒数第k个结点
*
* 输入一个链表,输出该链表中倒数第k个结点。
*
* 思路:
* 两个指针p1,p2,开始都指向头结点
* 先让p2走k步
* 然后p1,p2同时向下走
* 当p2指向null的时候,p1就是倒数第k个节点
*
*
* */
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Offer14 {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null )
return null;
//快慢指针
ListNode p1=head;
ListNode p2=head;
//p2先走k步
while(k>0 && p2 !=null) {
p2=p2.next;
k--;
}
//p2指向head说明k<=0,p2=null&&k>0说明k超过了链表的长度
if(p2==head || (p2==null && k>0)) {
return null;
}
//p1p2一起动
while(p2!=null) {
p1=p1.next;
p2=p2.next;
}
return p1;
}
}
剑指Offer14——链表中的倒数第k个结点
最新推荐文章于 2021-05-01 07:11:27 发布