hot100:链表倒数k个节点- 力扣(LeetCode)

题目:

实现一种算法,找出单向链表中倒数第 k 个节点。返回该链表中倒数第k个节点。

示例一:

输入:{1,2,3,4,5},2

返回值:{4,5}

说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。

示例二:

输入:{2},8

返回值:{}

思路如下:

用双指针,可省去统计链表长度操作,算法流程为:

  1. 初始化双指针 pre , cur 都指向头节点 head ;

  2. 先令 cur 走 k 步,此时 pre , cur 的距离为 k ;

  3. 令 pre , cur 一起走,直到 cur 走过尾节点时跳出,此时 pre 指向「倒数第 k 个节点」,返回之即可;

注意:

1.处理 k <= 0

if k <= 0 or not pHead:
    return None

2.检查快指针移动时的越界

for _ in range(k):
    if not cur:  # 此时 cur 为 None,但循环尚未完成 k 次
        return None
    cur = cur.next
题解如下:
class Solution:
    def FindKthToTail(self , pHead, k):
        """
                   :type:  pHead: ListNode, k: int
                   :rtype: ListNode
        """
        # write code here
        if k <=0 or not pHead:
            return None
        pre, cur = pHead, pHead
        for _ in range(k):
            if not cur:
                return None
            cur = cur.next
        while cur:
            pre, cur = pre.next, cur.next
        return pre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值