问题

题解
思路
-
先遍历多少个节点,倒数变正数: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;
}
}
博客主要介绍了如何在链表中找到倒数第k个节点,提供了两种方法:一是先遍历链表使倒数变为正数,二是使用双指针技巧,其中慢指针slow先走k步,然后同时移动,当快指针fast到达末尾时,slow即为倒数第k个节点。
357

被折叠的 条评论
为什么被折叠?



