24 - 两两交换链表中的节点 - python

104 阅读1分钟

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

题目要求两两交换链表中的节点,并返回交换后新链表的表头。我们可以设置两个指针slowfast分别指向链表中前后两个元素,并新建表头用于最后结果的返回。依次访问链表中slowfast指向的元素,并先将fast指向的元素链接到新链表中,再将slow指向的元素链接到新链表中。重复前面的过程,最后将剩余的元素链接后返回表头即可。

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if not head: return None

        slow = head
        fast = head.next
        new = ListNode(-1)
        cur = new
        while fast and fast.next:
            cur.next = ListNode(fast.val)
            cur.next.next = ListNode(slow.val)
            cur = cur.next.next
            slow = slow.next.next
            fast = fast.next.next
        
        if slow and fast:
            cur.next = ListNode(fast.val)
            cur.next.next = ListNode(slow.val)
        else:
            cur.next = ListNode(slow.val)
            
        return new.next