LC.P24[两两交换链表中的节点]

方法一:递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) return head;
ListNode newHead = head.next;
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
}
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$

方法二:迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) return head;
ListNode ans = new ListNode(0, head);
ListNode pre = ans, cur = head;
while (cur != null && cur.next != null) {
ListNode temp = cur.next;
cur.next = temp.next;
temp.next = cur;
pre.next = temp;
pre = cur;
cur = cur.next;
}
return ans.next;
}
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(1)$