题目描述
输入一个链表,输出该链表中倒数第k个结点。
示例1
输入
1,{1,2,3,4,5}
返回值
{5}
解题思路
注意异常跳出情况:k<0或者k>数组的长度或者数组为空,需要返回空
方法一:先遍历出链表长度,计算n-k,再进行二次遍历
方法二:利用快慢指针。使快指针比慢指针快k个结点。之后一块右移,直到快节点移到链表尾
java代码
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail1(ListNode head,int k) {//16ms 9836KB if(head==null || k<=0) return null; int n=0; ListNode cur=head; while(cur!=null){ cur=cur.next; n++; } if(n<k) return null; n-=k; while(n>0){ head=head.next; n--; } return head; } public ListNode FindKthToTail(ListNode head,int k) {//15ms 10072KB if(head==null || k<=0) return null; ListNode low=head; ListNode fast=head; while(k>0){ if(fast==null) return null; fast=fast.next; k--; } while(fast!=null){ fast=fast.next; low=low.next; } return low; } }