给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路
这道题目正常模拟就可以了。
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序
初始时,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; } }