题目:
解法一:递归
思路:首先将原头部节点的下一个节点head.next作为新的头部节点,然后对head.next进行递归,最终将递归后的head放到新头部节点的next,即new_head.next。
官方思路:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null){
return null;
}
if(head.next==null){
return head;
}
ListNode new_head = head.next;
head.next = swapPairs(head.next.next);
new_head.next = head;
return new_head;
}
}
解法二:迭代
官方思路:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode new_head = new ListNode(0);
new_head.next = head;
ListNode cur = new_head;
while(cur.next!=null && cur.next.next!=null){
ListNode left = cur.next;
ListNode right = cur.next.next;
left.next = right.next;
cur.next = right;
right.next = left;
cur = cur.next.next;
//System.out.println(cur.val);
}
return new_head.next;
}
}