问题
题解
思路
-
先遍历多少个节点,倒数变正数:O(n) O(1)
-
双指针:O(n) O(1)
slow=head fast=head+k步,最后slow为倒数第k个,fast=null
代码
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
/* 方法1
ListNode h = head;
int len = 0;
while(head!=null){
len++;
head = head.next;
}
//len-倒数第几个+1=正数第几个
k = len-k+1;
int i=1;
while(i<k){
i++;
h = h.next;
}
return h;
*/
// 方法2:双指针
ListNode slow=head,fast=head;
for(int i=0;i<k;i++) fast=fast.next;
while(fast!=null){
fast = fast.next;
slow = slow.next;
}
return slow;
}
}