Skip to content
On this page

24. 两两交换链表中的节点

原题链接:LeetCode 24. 两两交换链表中的节点

题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

**输入:**head = [1,2,3,4] 输出:[2,1,4,3]

示例 2:

**输入:**head = [] 输出:[]

示例 3:

**输入:**head = [1] 输出:[1]

提示:

- 链表中节点的数目在范围 `[0, 100]` 内

- `0 <= Node.val <= 100`

难度: Medium


题解代码

javascript
/**
 * 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 arr = []
  // let p = head
  // let count = 0
  // while (p) {
  //   count++
  //   if (count % 2) {
  //     arr.push(p.val)
  //   } else {
  //     arr.splice(arr.length - 1, 0, p.val)
  //   }
  //   p = p.next
  // }
  // let p1 = head
  // while (p1) {
  //   p1.val = arr.shift()
  //   p1 = p1.next
  // }
  // return head

  // TODO: 递归
    if (!head || !head.next) return head
    let p1 = head
    let p2 = head.next
    let p3 = head.next.next
    p2.next = p1
    p1.next = swapPairs(p3)
    return p2
};

技术文档集合