两两交换
LeetCode第24题,两两交换链表中的结点
初看此题真的头皮发麻,两两反转而不是全反转,看起来好像是之前的指定区间反转将区间固定为2然后执行多次的版本,但他的思想却比我想得要简单的多,并且看完后不得不说真的很妙
下面是解题思路图
通过这个图,我们便可以得出解题的代码如下:
public static ListNode swapPairs(ListNode head) {
if(head == null){
return null;
}
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
while(cur.next != null && cur.next.next != null){
ListNode node1 = cur.next;
ListNode node2 = cur.next.next;
cur.next = node2; // 第一步
node1.next = node2.next; //第二步
node2.next = node1; // 第三步
cur = node1; //第四步
}
return dummyHead.next;
}
运行结果如下:
这个解法巧就巧在循环中通过对cur.next和cur.next.next来进行操作,获得了后面的元素,并且在反转的时候可以清晰的进行next指针的转向