赞
踩
新建虚拟头节点,用3个指针记录前3个节点,然后再相互赋值指向,再移动当前节点,当前节点所在的位置,只能交换该节点的后两个节点(所以必须建立虚拟头节点,才能操作第1,2个节点)
class Solution { public ListNode swapPairs(ListNode head) { //新建虚拟头节点,因为如果需要调换某两个节点,当前节点必须位于这两个待调换的节点前,不然代码没法写 ListNode xuniHead = new ListNode(); xuniHead.next = head; ListNode cur = xuniHead; ListNode first; ListNode second; ListNode third; //节点是偶数时,最后结束是cur.next==null, //奇数时,最后结束是 cur.next.next==null while(cur.next!=null && cur.next.next!=null){ //每一次循环,只换两个值; //先把节点1,2,3保存起来,不然后面指针很乱,找不到了; first = cur.next; second = cur.next.next; third = cur.next.next.next; //让当前指针指向2节点 cur.next = second; //2节点指向1节点 second.next = first; //1节点指向3节点 first.next = third; //移动当前节点 到1节点 cur = first; } return xuniHead.next; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。