剑指Offer(十四):链表中倒数第k个结点

①暴力解法----就直接遍历两遍链表了。。第一遍先记录总长度,然后总长度减去倒数的就能从头开始数,得到需要的那个了= =、

class Solution:
    """
    执行结果:通过
    执行用时:36 ms, 在所有 Python3 提交中击败了60.77%的用户
    内存消耗:15 MB, 在所有 Python3 提交中击败了13.30%的用户
    通过测试用例:208 / 208
    """
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        array = []
        statical = head
        while head:
            array.append(head.val)
            head = head.next
        pos = len(array) - k
        while pos > 0:
            statical = statical.next
            pos -= 1
        return statical

这样的不好在于开辟了新的空间。所以看看题解了= =、

②使用快慢指针,当先走的指针走了k个之后,第二个再走,这样先走的指针达到末尾时,第二个指针的位置就是所需要的。

class Solution:
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        if head == None or k == 0:
            return None
        preNode = head
        rearNode = head
        t = 0
        while preNode:
            if t >= k:
                rearNode = rearNode.next
            preNode = preNode.next
            t += 1
        return rearNode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值