欣迪

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
};

訂閱 IT-Monk

訂閱最新文章的發布消息! 😚😚😚
Loading

作者介紹 - 欣迪

欣迪

從設計到寫程式,發現自己有追求前端技巧的自虐傾向。不斷的踩坑,再從坑裡爬出來,慢慢對攀岩有點心得。 目前在多間公司擔任網站設計顧問。 同時也是網站架設公司負責人。