1. 题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例1.
    给定 1->2->3->4, 你应该返回 2->1->4->3.
    
2. 思路:
设置两个快慢指针,快指针每次走两步,慢指针每次走一步,然后交换快慢指针
3. 代码:
    public static ListNode swapPairs(ListNode head) {
    if (head == null || head.next == null){
        return head;
    }
    ListNode preNode = new ListNode(-1);
    preNode.next = head;
    ListNode slow = preNode.next;
    ListNode fast = preNode.next.next;
    //将head设置为第二个元素,否则会丢失结果链表的第一个元素
    head = fast;
    while (slow!= null && fast != null){
        //交换快慢指针
        ListNode nodeTemp = fast.next;
        slow.next = nodeTemp;
        fast.next = slow;
        preNode.next = fast;
        preNode = slow;
        slow = preNode.next;
        if (slow != null){
            fast = preNode.next.next;
        }else {
            break;
        }
    }
    return head;
}
12-13 04:15
查看更多