# 两两交换链表中的节点
力扣🔗: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
}