给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]示例 2:
输入:head = [] 输出:[]示例 3:
输入:head = [1] 输出:[1]提示:
- 链表中节点的数目在范围
[0, 100]
内0 <= Node.val <= 100
看到题目后使用虚拟节点,就不需要考虑第一个节点的特殊性了
步骤如图所示
根据这个步骤就可以写出代码了
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = dummy;
while(cur.next!=null&&cur.next.next!=null){
ListNode temp1 = cur.next;//记录两个节点的第一个节点
ListNode temp2 = cur.next.next.next;//记录两个节点的后面那个节点
cur.next = cur.next.next;//步骤1
cur.next.next = temp1;//步骤2
temp1.next = temp2;//步骤3
cur = cur.next.next;//移动到下两个节点
}
return dummy.next;
}
}