给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
题目要求两两交换链表中的节点,并返回交换后新链表的表头。我们可以设置两个指针slow和fast分别指向链表中前后两个元素,并新建表头用于最后结果的返回。依次访问链表中slow和fast指向的元素,并先将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