给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
需求
- 交换链表中的相邻节点
- 返回交换链表后的头节点
- 不锈钢节点内部的值
实现
- 设立虚拟头节点
- 设置两个相邻的变量实现遍历
代码
class Solution {
public ListNode swapPairs(ListNode head) {
// 创建一个虚拟节点,指向头节点
ListNode dummy = new ListNode();
// 创建一个当前节点,指向虚拟节点
ListNode current = dummy;
// 当当前节点的下一个节点和下下一个节点都存在时,进行交换
while (current.next != null && current.next.next != null) {
// 创建两个节点,分别指向当前节点的下一个节点和下下一个节点
ListNode first = current.next;
ListNode second = current.next.next;
// 交换两个节点的位置
first.next = second.next;
// 将当前节点指向第二个节点
current.next = second;
// 将第二个节点指向第一个节点
current.next.next = first;
// 将当前节点移动到下一个节点
current = current.next.next;
}
return dummy.next;
}
}
