Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
代码一、使用递归,比较简单。
递归思路:每次取前两个连续节点AB,假设后面所有节点都通过递归完成交换。那么剩下的操作只要把AB交换,交换后变成BA,下一步将A指向后面的第一个节点即可。
class Solution {
public ListNode swapPairs(ListNode head) {
if( head == null || head.next == null ) return head;
ListNode cur = head.next;
head.next = swapPairs( cur.next );
cur.next = head;
return cur;
}
}
代码二、非递归写法,稍微难写一点。
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode first = new ListNode(-1);
first.next = head;
ListNode node = first;
while(node.next != null && node.next.next != null){
ListNode temp1 = node.next;
ListNode temp2 = node.next.next;
temp1.next = temp2.next;
temp2.next = temp1;
node.next = temp2;
node = node.next.next;
}
return first.next;
}
}