题目描述
输入一个链表,输出该链表中倒数第k个结点。
初步解题思路:先求出链表总长,再从头遍历到倒数第k个结点。
最优解:这个想法很巧妙。因为求得是倒数第k个,所以设置两个头指针,一个先走到k个结点,然后两个指针同时走,当第一个指针走完为null时,第二个指针也走到了倒数第k个结点(第二个指针还剩k个结点)。
Java初步解题
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode dummy = null;
dummy = head;
int count = 0;
if(head == null)
return null;
while(dummy!=null){
count++;
dummy = dummy.next;
}
if(count<k)
return null;
int i = 0;
while(i<(count-k)){
head = head.next;
i++;
}
return head;
}
}
最优解
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode pre = head, result = head;
int count=0;
while(pre!=null){
pre = pre.next;
if(count>=k)
result = result.next;
count++;
}
if(count<k)
return null;
return result;
}
}