解法1:递归
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
new_head=head.next
head.next=self.swapPairs(new_head.next)
new_head.next=head
return new_head
以 1-2-3-4-5-6 为例,过程如下:
解法2: 迭代
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
def swapnode(l):
if l.next==None:
return l,None
r=ListNode(-1)
res=ListNode(-1)
res.next=l.next.next
r.next=l.next
l.next=None
r.next.next=l
return r.next,res.next
res=ListNode(-1)
l=res
l1=ListNode(-1)
l1.next=head
if head==None or head.next==None:
return head
while l1.next:
res.next,l1.next=swapnode(l1.next)
res=res.next.next
return l.next
自己的迭代写的有点麻烦,官方更简洁
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummyHead = ListNode(0)
dummyHead.next = head
temp = dummyHead
while temp.next and temp.next.next:
node1 = temp.next
node2 = temp.next.next
temp.next = node2
node1.next = node2.next
node2.next = node1
temp = node1
return dummyHead.next