24. Swap Nodes in Pairs (题目链接)
Medium
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:
Given1->2->3->4
, you should return the list as2->1->4->3
.
方法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
cur, cur_next = head, head.next
rlt = head.next
pre = ListNode()
while cur:
pre.next = cur_next
if cur_next.next:
pre = cur
cur_next_next = cur_next.next
cur_next.next = cur
cur = cur_next_next
if not cur:
return rlt
cur_next = cur.next
if not cur_next:
pre.next = cur
return rlt
else:
cur_next.next = cur
cur.next = None
return rlt
方法2:递归
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
head_next = head.next
head.next = self.swapPairs(head_next.next)
head_next.next = head
return head_next