day04 代码随想录算法训练营 24. 两两交换链表中的节点

题目:24. 两两交换链表中的节点

我的感悟:

  • 我感觉,python中对链表的概念,很弱。
  • 链表在现在语言中,用的不多。
  • 先搁置。

理解难点:

  • 可以看懂代码。

总结概括:

代码示例:

# 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]:

        dummy_head = ListNode()
        dummy_head.next = head
        current = dummy_head
        
        # 必须有cur的下一个和下下个才能交换,否则说明已经交换结束了
        # 假设链表是:[虚拟]->[1]->[2]->[3]...
        while current.next and current.next.next:
            # 此时current 是[虚拟]
            temp = current.next # 防止节点修改 # 存的是1位置的指针
            temp1 = current.next.next.next    # 存的3位置的指针(下一轮循环要用)
            
            # 开始交换 (本题就是要改next和next.next)
            current.next = current.next.next    # 虚拟节点的next指向2
            current.next.next = temp    # x虚拟节点的next的next指向1
            
            # 交换完毕,为下一轮做准备
            temp.next = temp1    # 为了下次循环,temp指向3的位置(本身temp已经结束自己的任务,为了下次循环接着用它)
            current = current.next.next    # 移动2位 
        return dummy_head.next

通过截图:

资料:

题目链接/文章讲解/视频讲解: https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html

posted @ 2024-01-01 19:04  o蹲蹲o  阅读(1)  评论(0编辑  收藏  举报