LeetCode.24 两两交换链表中的结点

时间:2023-01-14 14:00:32

1.题目

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

 


2.代码

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
//创建一个虚拟头结点
ListNode dummyHead = new ListNode();
dummyHead.next = head;//让虚拟头结点的下一个结点指向真实的头结点
ListNode cur = dummyHead;//定义一个指针指向虚拟头结点
while(cur.next != null && cur.next.next != null){//循环的条件,注意&&前后不能调换,否则可能会出现空指针异常
ListNode temp1 = cur.next;//保存1结点
ListNode temp2 = cur.next.next.next;//保存3结点
cur.next = cur.next.next; //让cur的下一个结点是2
cur.next.next = temp1;//让2的下一个结点是1
temp1.next = temp2;//让1的下一个结点是3
cur = cur.next.next;//移动cur指针到新的1位置

}
return dummyHead.next;//最后返回虚拟头结点的下一个结点就是真是的头结点
}
}


2.图解

LeetCode.24 两两交换链表中的结点


LeetCode.24 两两交换链表中的结点


LeetCode.24 两两交换链表中的结点