给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
public static ListNode swapParis(ListNode head){ /*声明一个哑节点*/ ListNode dumb=new ListNode(0); /*哑节点的下一个节点指向头节点*/ dumb.next=head; /*声明一个引用指向哑节点*/ ListNode temp=dumb; /*如果哑节点的下一个节点和下下一个节点不为空继续转换*/ while (dumb.next!=null&&dumb.next.next!=null){ /*要转换的第一个节点(称为curr)*/ ListNode curr=dumb.next; /*要转换的第二个节点(称为next)*/ ListNode next=dumb.next.next; /*指定curr的下一个是next的下一个*/ curr.next=next.next; /*指定next的下一个是curr*/ next.next=curr; /*指定哑节点的下一个是next*/ dumb.next=next; /*哑节点引用指向哑节点的下下一个节点*/ dumb=dumb.next.next; } /*返回哑节点的没改变引用的下一个节点*/ return temp.next; }
代码中有注释。