LeetCode:24. Swap Nodes in Pairs(Medium)

1. 原题链接

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

2. 题目要求

给定一个链表,交换相邻的两个结点。已经交换的结点,不再进行交换。

注意:所使用的空间大小固定

例如,1->2->3->4转换后为2->1->4->3

3. 题目思路

使用一个遍历指针current和两个辅助指针first、second,first保存current指针所在结点的后继结点,second保存current指针所在结点的后继的后继结点。

令first的后继指向second的后继,current的后继等于second,current后继的后继等于first,current等于first

4. 代码实现

public class SwapNodeInPairs24 {
    public static void main(String[] args) {
        ListNode l1 = new ListNode(1);
        ListNode l2 = new ListNode(2);
        ListNode l3 = new ListNode(3);
        ListNode l4 = new ListNode(4);
        ListNode l5 = new ListNode(5);
        ListNode l6 = new ListNode(6);
        l1.next = l2;
        l2.next = l3;
        l3.next = l4;
        l4.next = l5;
        l5.next = l6;

        ListNode ls1 = l1;
        while (ls1 != null) {
            System.out.print(ls1.val);
            ls1 = ls1.next;
        }
        System.out.println("");

        ListNode ls2 = swapPairs(l1);
        while (ls2 != null) {
            System.out.print(ls2.val);
            ls2 = ls2.next;
        }

    }

    public static ListNode swapPairs(ListNode head) {
        ListNode headPointer = new ListNode(0);
        headPointer.next = head;
        ListNode current = headPointer;

        while (current.next != null && current.next.next != null) {
            ListNode first = current.next;
            ListNode second = current.next.next;
            first.next = second.next;
            current.next = second;
            current.next.next = first;
            current = first;
        }


        return headPointer.next;
    }

    public static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }
}

  

posted @ 2017-12-28 10:00  一只敲码的猫  阅读(260)  评论(0编辑  收藏  举报