代码练习6-链表中倒数最后k个结点

输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。

如果该链表长度小于k,请返回一个长度为 0 的链表。

快慢指针:使用两个指针 slowfast,首先让 fast 指针先走 k 步,然后再同时移动 slowfast 指针,直到 fast 指针到达链表的末尾。此时 slow 指针所指的节点就是倒数第 k 个节点。

链表为:1 -> 2 -> 3 -> 4 -> 5k = 2。 

  1. 初始状态:

    • slow 指向节点 1
    • fast 指向节点 1
  2. fast 指针先走 k = 2 步:

    • 第一次循环:
      • fast 移动到节点 2
    • 第二次循环:
      • fast 移动到节点 3

现在,fast 指针和 slow 指针之间相隔 k = 2 步。

  1. 同时移动 slowfast 指针:
    • fast 指针到达链表末尾时,slow 指针正好指向倒数第 k 个节点。

 C++核心代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* FindKthToTail(ListNode* pHead, int k) {
        if (pHead ==nullptr || k < 0){
            return nullptr;

        }
        ListNode* slow = pHead;
        ListNode* fast = pHead;

        for  (int i = 0; i<k;i++){
            if (fast == nullptr){
                return nullptr;
            }
            fast = fast->next;
        }

        while (fast != nullptr) {
            slow = slow->next;
            fast = fast->next;
        
        }
        return slow;
    }
};

 Python核心代码

class Solution:
    def FindKthToTail(self, pHead: ListNode, k: int) -> ListNode:
        if not pHead or k <= 0:
            return None

        # 使用快慢指针来找到倒数第 k 个节点
        slow = fast = pHead

        # 先让 fast 指针先走 k 步
        for _ in range(k):
            if not fast:
                return None  # 链表长度小于 k
            fast = fast.next

        # 同时移动 slow 和 fast,直到 fast 到达链表末尾
        while fast:
            slow = slow.next
            fast = fast.next

        return slow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值