返回
千钧一发!LeetCode 19 题:勇闯链表迷宫,斩断尾随倒数结点
前端
2024-01-31 03:11:34
勇闯链表迷宫
链表,数据结构中的一员猛将,拥有独树一帜的存储结构,如同一串珍珠般将数据串联起来。但在风起云涌的编程江湖,链表也是一道道充满挑战的关卡,需要算法高手们使出浑身解数,方能勇闯成功。
leetcode 19 题:倒数第 N 个结点的终结者
今天,我们要面对的便是 leetcode 19 题,一道看似平平无奇,实则暗藏玄机的链表习题。题目要求我们斩断链表的倒数第 n 个结点,就像武侠小说中武林高手的轻功水上漂,需要精准计算,才能一击必中。
剖析题意,步步为营
若想挑战成功,首先需要细细品味题意,将其分解为一个个清晰明了的步骤:
-
明确目标: 我们需要删除链表的倒数第 n 个结点。
-
理解倒数概念: 所谓倒数,指的是从链表尾部开始计算。
-
精准定位: 找到倒数第 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 题,我们领略了链表的奥妙,也对算法的精妙运用有了更深刻的认识。链表如同一张蛛网,层层叠叠,变化莫测。而算法就像锋利的剑刃,能斩断迷雾,直达目标。希望这篇文章能让你在编程的道路上更进一步。