2024/11/27 【链表】LeetCode 24 两两交换链表中的节点 & LeetCode 19 删除链表的倒数第N个节点

24. 两两交换链表中的节点 - 力扣(LeetCode) 

代码随想录

递归方式:没有想到

复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head
        
        pre = head
        cur = head.next
        next = head.next.next

        cur.next = pre
        pre.next = self.swapPairs(next)

        return cur   
复制代码

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

代码随想录给出的一次遍历的双指针法,没有想到

复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        dummy_head = ListNode(next=head)
        slow = fast = dummy_head
        
        for i in range(n+1):
            fast = fast.next
        
        while fast:
            slow = slow.next
            fast = fast.next

        slow.next = slow.next.next

        return dummy_head.next
复制代码

 需要理解为什么快指针先走n+1步🌟

推出快指针先走 n+1 步是为了在链表中为慢指针和快指针之间创建一个“间隔”,这个间隔的长度恰好等于 n(如果我们考虑的是从快指针停止后,慢指针指向的位置到快指针停止时所在位置之间的节点数,不包括慢指针指向的节点)。这样做的目的是为了让慢指针能够在快指针到达链表末尾时,精确地指向倒数第 n+1 个节点。

posted @   axuu  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示