题目:
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.
解法:采用递归的思想,若链表元素少于2个,则返回;
若链表元素>=2个,则将最前面的两个节点逆序,并衔接上后半个链表的递归结果节点即可。
public class No23_SwapNodesInPairs {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public static void main(String[] ags){
ListNode n1 = new ListNode(1);
ListNode n2 = new ListNode(2);
ListNode n3 = new ListNode(3);
ListNode n4 = new ListNode(4);
ListNode n5 = new ListNode(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
ListNode head = n1;
ListNode x = swapPairs(head);
while(x!=null){
System.out.println(x.val);
x = x.next;
}
}
public static ListNode swapPairs(ListNode head) {
if(head == null) return null;
if(head.next == null) return head;
ListNode tmp = head.next;
head.next = swapPairs(tmp.next);
tmp.next = head;
return tmp;
}
}