# 两两交换链表中的节点

力扣🔗:https://leetcode-cn.com/problems/swap-nodes-in-pairs (opens new window)

# 题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 链表中节点的数目在范围 [0, 100]
  • 0 <= Node.val <= 100

# 解题思路

  • 首先创建一个虚拟节点拼接上 head 组成一个新链表 result,设置变量 temp 用于指向该链表上的节点。
  • 通过迭代,每次处理链表上相邻的两个节点,通过分别指向 temp.next 和指向 temp.next.next 的指针和 temp指针进行位置反转,直到最后一个奇数节点。

# 代码实现

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
function swapPairs(head) {
  const result = new ListNode(0, head)
  let temp = result
  
  while (temp.next && temp.next.next) {
    const left = temp.next
    const right = temp.next.next

    temp.next = right
    left.next = right.next
    right.next = left
    temp = left
  }

  return result.next
}