Featured image of post 剑指 Offer 22. 链表中倒数第 k 个节点

剑指 Offer 22. 链表中倒数第 k 个节点

题目描述

输入一个链表,输出该链表中倒数第 k 个节点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

示例:

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

返回链表 4**->5**.

解法一:快慢指针

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getKthFromEnd(head *ListNode, k int) *ListNode {
    slow, fast := head, head
    for k > 0 {
        if fast == nil {
            panic("illegal k value")
        }
        fast = fast.Next
        k--
    }
    for fast != nil {
        slow = slow.Next
        fast = fast.Next
    }
    return slow
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/14 18:47:16
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计