两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路
这道题目正常模拟就可以了。
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序
初始时,cur指向虚拟头结点,然后进行如下三步:

class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null ||head.next==null){
return head;
}
ListNode dumyHead=new ListNode();
dumyHead.next=head;
ListNode cur=dumyHead;
//这里的条件要注意一下 cur.next!=null && cur.next.next!=null
while(cur.next!=null&&cur.next.next!=null){
ListNode n1=cur.next;
ListNode n2=cur.next.next;
cur.next=n2;
n1.next=n2.next;
n2.next=n1;
cur=n1;
}
return dumyHead.next;
}
}

浙公网安备 33010602011771号