Leetcode-面试题22-链表的倒数第k个节点

Leetcode-面试题22-链表的倒数第k个节点

思路:快慢指针

题目描述

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

1
2
3
给定一个链表: 1->2->3->4->5, 和 k = 2.

返回链表 4->5.

Solution:快慢指针

  • 先让fast指针走k步
  • 然后fast和slow再同时走,这里fast走到最后,slow刚好走了n-k步
  • slow刚好是n-k的节点

注意:判断退出条件是fast == null

把上述思路转换成代码即可:

Java

Solution :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public ListNode getKthFromEnd(ListNode head,int k){
ListNode fast = head;
ListNode slow = head;

// 先让fast指针走k步
for (int i = 0; i < k; i++) {
fast = fast.next;
}
// 然后fast和slow再同时走
// 这里fast走到最后,slow刚好走了n-k步
while (fast != null){
fast = fast.next;
slow = slow.next;
}

// slow刚好是n-k的节点
return slow;
}
}
  • 时间复杂度:O(n),n 是链表的长度
  • 空间复杂度:O (1),不需要额外的空间

Python

Solution :

1
2


打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信