24. Swap Nodes in Pairs
Leetcode
https://leetcode.com/problems/swap-nodes-in-pairs/
題目
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)
Example 1:

Input: head = [1,2,3,4]
Output: [2,1,4,3]Example 2:
Input: head = []
Output: []Example 3:
Input: head = [1]
Output: [1]è§£ç”
方法一
Recursive Approach
var swapPairs = function(head) {
if (!head || !head.next) return head;
let firstNode = head;
let secondNode = head.next;
firstNode.next = swapPairs(secondNode.next);
secondNode.next = firstNode;
return secondNode;
};Runtime: 101 ms, faster than 15.42% of JavaScript online submissions for Swap Nodes in Pairs.
Memory Usage: 38.4 MB, less than 96.40% of JavaScript online submissions for Swap Nodes in Pairs.
方法二
Iterative Approach
var swapPairs = function(head) {
if (!head || !head.next) return head;
// 回傳第二個 node èµ·é çš„ linked list
let beginNode = head.next;
let prevNode = new ListNode(-1);
while(head && head.next) {
let firstNode = head;
let secondNode = head.next;
// Swapping
prevNode.next = secondNode;
firstNode.next = secondNode.next;
secondNode.next = firstNode;
// 儲å˜é€™ä¸€è¼ªçš„ firstNode 以讓下一輪指到æ£ç¢ºçš„ secondNode (line 12)
prevNode = firstNode;
// 讓 head 跳兩個 node
head = firstNode.next;
}
return beginNode;
};Runtime: 68 ms, faster than 91.84% of JavaScript online submissions for Swap Nodes in Pairs.
Memory Usage: 39.1 MB, less than 46.13% of JavaScript online submissions for Swap Nodes in Pairs.
Last updated
Was this helpful?