1. 题目描述
2. 题目分析
1.链表如下所示:
2. 建立一个root结点,并建立两个结点指针,如图所示:
注意:这里的0结点,是JAVA建立root结点是附带的:ListNode root = new ListNode(0);
3. 思路如下:
将p1.next连接到p2.next(0----->2),如下:
将p2.next连接到p1.next.next(1----->3),如下:
将p1.next.next连接到p2(相当于2----->1),如图所示:
千万不要链表越界,注意p2指针的范围while(p2 != null && p2.next != null)
3. 题目代码
class Solution { public ListNode swapPairs(ListNode head) { if(head == null){ return head; } ListNode root = new ListNode(0); root.next = head; ListNode p1 = root; ListNode p2 = root.next; while(p2 != null && p2.next != null) { p1.next = p2.next; p2.next = p1.next.next; p1.next.next = p2; p1 = p2; p2 = p2.next; } return root.next; } }