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

题目描述

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

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

示例:

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

返回链表 4->5.

解题思路

遍历整个数组,然后取倒数第k个结点
很简单,不描述。
双指针
设立快慢两个指针,当fast走了k个后,slow开始走。当fast碰到None时,slow指针指向的就是倒数第k个结点。

解题代码

遍历整个数组,然后取倒数第k个结点:

class Solution:
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        node_list = []
        node = head
        count = 1
        linklist_length = 0
        while node != None:
            node_list.append(node)
            linklist_length += 1
            node = node.next
        return node_list[linklist_length - k]

双指针:

class Solution:
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        node_list = []
        fast, slow = head, head
        step_count = 0
        while fast != None:
            fast = fast.next
            step_count += 1
            if step_count > k:
                slow = slow.next
        return slow

执行结果

方法1 48ms 14.8MB
方法2 52ms 14.8MB

版权声明:
作者:iLemonRain
链接:http://314401480.xyz/?p=225
来源:柠檬酱的blog
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>