Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
public ListNode swapPairs(ListNode head) {
//链表为空或者只有一个头节点
if (head == null || head.next == null) {
return head;
}
ListNode nHead = swapNode(head);
//ptr指向已交换节点最后一个节点
ListNode ptr = nHead.next;
while (ptr.next != null && ptr.next.next != null) {
ptr.next = swapNode(ptr.next);
ptr = ptr.next.next;
}
return nHead;
}
/**
* 交换2个ListNode
* @param head
* @return 返回交换后的第一个节点
*/
private ListNode swapNode(ListNode head) {
ListNode p = head;
ListNode q = p.next;
p.next = q.next;
q.next = p;
return q;
}