给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
输入:head = [1,2,3,4] 输出:[2,1,4,3]
示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
解决方法:定义2个指针(头指针front,尾指针tail),这2个指针进行节点的互换,循环时,若尾部指针还能向后移动2个位置,就一直交换下去。还要定义一个临时指针,若前面进行过交换,在下次交换时还要将前一次交换后的尾节点指向这次交换后的头结点,所以记录上次交换后的尾节点.
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
#定义2个指针
front = ListNode()
tail = ListNode()
#若少于2个节点,则不需要交换
if head == None or head.next == None:
return head
else:
front = head
tail = head.next
#保存头结点
new_head = tail
temp = None
while True:
#注意,这个顺序不能改变
front.next = tail.next
tail.next = front
#若前面进行过交换,在下次交换时还要将前一次交换后的
#尾节点指向这次交换后的头结点
if temp != None:
temp.next = tail
#这时候front和tail的相对位置发生改变
#tail指针向后移动2个位置(若后面还有至少2个节点,继续循环)
if front.next != None and front.next.next != None:
temp = front
#下面2个顺序不能调换
tail = front.next.next
front = front.next
else:
break
return new_head