返回

千钧一发!LeetCode 19 题:勇闯链表迷宫,斩断尾随倒数结点

前端

勇闯链表迷宫

链表,数据结构中的一员猛将,拥有独树一帜的存储结构,如同一串珍珠般将数据串联起来。但在风起云涌的编程江湖,链表也是一道道充满挑战的关卡,需要算法高手们使出浑身解数,方能勇闯成功。

leetcode 19 题:倒数第 N 个结点的终结者

今天,我们要面对的便是 leetcode 19 题,一道看似平平无奇,实则暗藏玄机的链表习题。题目要求我们斩断链表的倒数第 n 个结点,就像武侠小说中武林高手的轻功水上漂,需要精准计算,才能一击必中。

剖析题意,步步为营

若想挑战成功,首先需要细细品味题意,将其分解为一个个清晰明了的步骤:

  1. 明确目标: 我们需要删除链表的倒数第 n 个结点。

  2. 理解倒数概念: 所谓倒数,指的是从链表尾部开始计算。

  3. 精准定位: 找到倒数第 n 个结点,是解题的关键。

执剑在手,算法出鞘

有了清晰的思路,我们便能挥舞算法之剑,斩断难题。代码如下:

def removeNthFromEnd(head, n):
    """
    :type head: ListNode
    :type n: int
    :rtype: ListNode
    """
    # 创建两个指针,一个快指针,一个慢指针
    fast = head
    slow = head

    # 快指针先走 n 步
    for _ in range(n):
        fast = fast.next

    # 当快指针走到链表末尾时,慢指针就位于倒数第 n 个结点之前
    if not fast:
        return head.next

    # 两个指针同时走,直到快指针走到链表末尾
    while fast.next:
        fast = fast.next
        slow = slow.next

    # 删除倒数第 n 个结点
    slow.next = slow.next.next

    # 返回链表头结点
    return head

总结升华,剑指未来

通过 leetcode 19 题,我们领略了链表的奥妙,也对算法的精妙运用有了更深刻的认识。链表如同一张蛛网,层层叠叠,变化莫测。而算法就像锋利的剑刃,能斩断迷雾,直达目标。希望这篇文章能让你在编程的道路上更进一步。

参考资料: