赞
踩
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
这道题的重点在于对(前驱节点)哨兵节点的使用
1、首先让哨兵节点l1=heads 头哨兵节点
2、l2等于l1的指向 ,即节点1;现在l2就是节点1;
由于已经用l2记录下了l1的指向,所以开始对l1的指向操作,将l1的next指向节点2,
l1.next = l2.next;
此时相当于节点1的指向已被记录,所以对节点1的指向使用l2操作,
l2.next = l2.next.next;
此时节点1有了新的后继节点3 ,节点2有了新的前驱节点头哨兵节点,现在将节点2反向指向节点1,即
l1.next.next = l2;
即
然后将l1作为前驱节点后移l1=l1.next.next 或者 l1=l2;
进行下一轮操作
完整代码为:
- public ListNode swapPairs(ListNode head) {
- if(head==null) return null;
- ListNode heads = new ListNode(0); //创建头哨兵节点
- heads.next = head; //与链表链接
- ListNode l1 = heads; //反转过程所需要的哨兵节点
- ListNode l2 = null; //过度链接使用的节点
- while (l1.next!=null&&l1.next.next!=null){
- l2 = l1.next;
- l1.next = l2.next;
- l2.next = l2.next.next;
- l1.next.next = l2;
- l1 = l1.next.next;
- }
- return heads.next;
- }
如有错误,请大神批评指教!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。