024 Swap Nodes in Pairs 交换相邻结点

给定一个链表,对每两个相邻的结点作交换并返回头节点。
例如:
给定 1->2->3->4,你应该返回 2->1->4->3。
你的算法应该只使用额外的常数空间。不要修改列表中的值,只有节点本身可以​​更改。

详见:https://leetcode.com/problems/swap-nodes-in-pairs/description/

实现语言:Java

方法一:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null){
            return null;
        }
        ListNode dummy=new ListNode(-1);
        ListNode pre=dummy;
        dummy.next=head;
        while(pre.next!=null&&pre.next.next!=null){
            ListNode last=pre.next.next;
            pre.next.next=last.next;
            last.next=pre.next;
            pre.next=last;
            pre=last.next;
        }
        return dummy.next;
    }
}

方法二:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode tmp=head.next;
        head.next=swapPairs(tmp.next);
        tmp.next=head;
        return tmp;
    }
}

 参考:http://www.cnblogs.com/grandyang/p/4441680.html

原文地址:https://www.cnblogs.com/xidian2014/p/8687130.html