24 两两交换链表中的节点

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

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

思路

建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。(可以简答理解为,处理某个节点的时候一定要找到该节点的前一个节点,这里为了方便处理头节点)
一定要画图,就看的清晰了!

代码

# 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(next=head)  # 建立虚拟节点
        cur = dummy_head
        while cur.next != None and cur.next.next != None:
            temp1 = cur.next  # 保存本来的头节点,因为cur.next就会丢失原先的cur.next节点
            temp2 = cur.next.next.next  # 保存第二次交换两个节点的前一个节点
            cur.next = cur.next.next
            cur.next.next = temp1
            temp1.next = temp2
            cur = cur.next.next
        return dummy_head.next  # 返回虚拟节点的下一个节点
posted @ 2022-09-01 20:41  时光如你般美好  阅读(15)  评论(0编辑  收藏  举报