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 second = head.next;
head.next = swapPairs(head.next.next);
second.next = head;
return second;
}
迭代式
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode current = dummy;
while (current.next != null && current.next.next != null) {
ListNode first = current.next;
ListNode second = current.next.next;
first.next = second.next;
current.next = second;
second.next = first;
current = second.next;
}
return dummy.next;
}