24. 两两交换链表中的节点
题目链接:
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
思路:
这道题目正常模拟就可以了。
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序。
初始时,cur指向虚拟头结点,然后进行如下三步:
操作之后,链表如下:
看这个可能就更直观一些了:
最后java代码整体如下:
```Java
class Solution {
public ListNode swapPairs(ListNode head) {
// 设置一个虚拟头结点
ListNode dummyHead = new ListNode(0);
// 将虚拟头结点指向head,这样方面后面做删除操作
dummyHead.next = head;
ListNode temp = dummyHead;
while (temp.next != null && temp.next.next != null) {
// 记录临时节点
ListNode node1 = temp.next;
// 记录临时节点
ListNode node2 = temp.next.next;
temp.next = node2;// 步骤一
node1.next = node2.next;// 步骤二
node2.next = node1;// 步骤三
// cur移动两位,准备下一轮交换
temp = node1;
}
return dummyHead.next;
}
}
```