题目描述
解题思路
使用迭代法进行解题。
用p1,p2表示当前的第一个和第二个节点,对p1和p2进行交换前要先保存p2的下一个节点p3=p2.next。此时对p1和p2进行交换。然后更新p1和p2,p1=p3,p2=p3.next,重复以上步骤直到全部节点交换完成即可。
复杂度分析:
由于只需要遍历一次链表,所以时间复杂度为o(n)
由于只需要创建常数个节点,所以空间复杂度为o(1)
python代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return head
newhead = p = ListNode(0)
p1 = head
p2 = head.next
while p1 and p2:
# 保存p2的下一个节点
p3 = p2.next
# 交换目前的两个节点
p.next = p2
p.next.next = p1
# 更新节点
p = p.next.next
p1 = p3
if p3:
p2 = p3.next
if p1:
p.next = p1
p.next.next = None
else:
p.next = p1
return newhead.next