[LeetCode]24. 两两交换链表中的节点(Swap Nodes in Pairs)

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路

略。

代码

Python 3.6

解法一:递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if head is None or head.next is None:
return head
head_next = head.next
head.next = self.swapPairs(head_next.next)
head_next.next = head
return head_next

执行用时 : 48 ms
内存消耗 : 13.9 MB

解法二:循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummy = ListNode(-1)
dummy.next = head
cur = dummy
while cur.next is not None and cur.next.next is not None:
start = cur.next
end = cur.next.next
cur.next = end
start.next = end.next
end.next = start
cur = start
return dummy.next

执行用时 : 44 ms
内存消耗 : 13.7 MB

参考

https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/hua-jie-suan-fa-24-liang-liang-jiao-huan-lian-biao/