题目
思路
这道题还是特别简单的,就是设置两个指针,front和rear,让front指针先走k步,然后再让rear和front一起前进,直到front走到链表尽头为止。
这是一道特别特别特别简单的数据结构题,我用脚趾头都能写出来。
然而
然而
然而
我却被测试例子各种吊打,一番总结之后,发现了其中有一个特殊情况要提前判断:
就是就是就是
要想判断链表长度和k之间的关系,如果链表长度小于k,那就说明倒数的节点就是头节点!!!
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
if(head==null)
return null;//别忘记了特判
int len=0;
ListNode c=head;
while(c!=null){
c=c.next;
len++;
}
if(len<=k){
return head;
}
ListNode front=head;
ListNode rear=head;
int m=k;
while(m>=0){
m--;
front=front.next;
}
while(front!=null){
front=front.next;
rear=rear.next;
}
return rear.next;
}
}