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]
Constraints:
- The number of nodes in the list is in the range
[0, 100]
. 0 <= Node.val <= 100
兩兩調換 Linked List,使用遞迴方法一路換回來:
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var swapPairs = function(head) { const swap = function(node) { // 先設定遞迴的結束條件,最後一個有 next 的 node 時回傳 if (!node || !node.next) return node // 連結到最後一組 node const newNode = node.next // 原本排在第一個 node 的 next 跳到下下一個 node.next = node.next.next // 原本排在第二個的 node 連回第一個 newNode.next = node // 把 node.next 這一段切掉,放到遞迴內,讓兩兩交換的結果一直回傳 node.next = swap(node.next) return newNode } const newNode = new ListNode() newNode.next = swap(head) return newNode.next };