(剑指offer)面试题22:链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个结点。
这道题的思路很好
如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针
第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点
然后两个指针一起遍历
当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点
推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第二个指针每次走一步, 快指针指到尾部, 慢指针正好指到中间

class ListNode:
    def __init__(self,x):
        self.val = x
        self.next = None

class Solution:
    def FindKthToTail(self,head,k):
        if head == None or k<= 0 :
            return None
        pAhead = head
        pBhead = None
        # 第一个游标执行k-1次
        for i in range(k-1):
            if pAhead.next != None:
                pAhead = pAhead.next
            else:
                return None

        pBhead = head
        while pAhead.next != None:
            pAhead = pAhead.next
            pBhead = pBhead.next
        return pBhead.val

node1 = ListNode(10)
node2 = ListNode(11)
node3 = ListNode(13)

node1.next = node2
node2.next = node3

s = Solution()
print(s.FindKthToTail(node1,4))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值