- 😭 第一次刷题 2020年3月10日
# 递归写法📓
WARNING
**时间复杂度:**O(N),其中 N 指的是链表的节点数量
**空间复杂度:**O(N),递归过程使用的堆栈空间
有点深奥,在思考的时候,可以考虑两个节点的情况👨🏻💻
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function(head) {
// 递归写法
if (head == null || head.next == null) {
return head;
}
let firstNode = head;
let secondNode = head.next;
firstNode.next = swapPairs(secondNode.next);
secondNode.next = firstNode;
return secondNode;
};
# 迭代写法 😎
WARNING
以前用 Java 做出来,但是现在又忘记了,还需要反复练习才行😬
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function(head) {
// 迭代写法
let dummyHead = new ListNode(-1);
dummyHead.next = head;
let cur = dummyHead;
while (cur.next != null && cur.next.next != null) {
let first = cur.next;
let end = cur.next.next;
cur.next = end;
first.next = end.next;
end.next = first;
cur = first;
}
return dummyHead.next;
};