Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list's nodes, only nodes itself may be changed.
Example: Given 1->2->3->4
, you should return the list as 2->1->4->3
.
将相邻的两个节点进行交换,在不交换值的前提条件下,只对节点指针进行交换。 时间复杂度为o(n),空间复杂度为O(1)。
思路: 可以利用链表中的哨兵机制来简化操作。具体操作步骤如下:
1 class Solution(object): 2 def swapPairs(self, head): 3 """ 4 :type head: ListNode 5 :rtype: ListNode 6 """ 7 GuardNode = p = ListNode(0) 8 GuardNode.next = head 9 10 while head and head.next: 11 tem = head.next # 指向第二个节点 12 head.next = tem.next # 第一个节点指向第三个节点 13 tem.next = head # 第二个节点指向第一个节点 14 p.next = tem # 哨兵指向反转后的第一个节点 15 p = head # 指向下两个待反转节点的前一个节点。 16 head = head.next # 指向下面即将反转的第一个节点 17 18 return GuardNode.next