题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路
正常模拟,建议使用虚拟头结点,这样就不用单独处理头结点
一定要画图,不然指针分不清楚!按照这样三个步骤即可
class Solution{
public ListNode swapPairs(ListNode head){
ListNode dummy = new ListNode(0);//创建一个虚拟头结点
dummy.next = head;
ListNode pre = dummy;
while(pre.next != null && pre.next.next!= null){//保证两两可交换
ListNode temp = head.next.next;//因为到时候节点2会指向节点1,节点3就会丢失指针,这样节点1会无法指向节点3
pre.next = head.next;//步骤1
head.next.next = head;//步骤2
head.next = temp;//步骤3
pre = head;//相当于pre指向了节点1
head = head.next;//相当于head指向了节点3,继续后续循环
}
return dummy.next;//注意这里的区别,pre最开始指向dummny,后续位置发生变动,但是dummy永远是指向虚拟头结点的,即dummy.next返回的是头结点
}
}