1. 程式人生 > 其它 >拷貝含隨機指標的連結串列

拷貝含隨機指標的連結串列

public class Main {

    static class Node {
        Node next;
        Node random;
        int val;

        public Node(int val) {
            this.val = val;
        }
    }

    private static Node copy(Node head) {
        if (head == null) {
            return null;
        }

        Node cur = head, next;

        while (cur != null) {
            next = cur.next;
            Node node = new Node(cur.val);
            cur.next = node;
            node.next = next;
            cur = next;
        }


        Node newHead = head.next;

        Node cur1 = head, cur2 = head.next, next1, next2;

        while (cur1 != null) {
            if (cur1.random != null) {
                cur2.random = cur1.random.next;
            }

            next1 = cur1.next.next;
            next2 = next1 == null ? null : next1.next;

            cur1.next = next1;
            cur2.next = next2;

            cur1 = next1;
            cur2 = next2;
        }

        return newHead;

    }

    public static void main(String[] args) {

        Node n1 = new Node(1);
        Node n2 = new Node(2);
        Node n3 = new Node(3);
        n1.next = n2;
        n2.next = n3;

        n1.random = n2;
        n2.random = n3;
        n3.random = n1;


        Node copy = copy(n1);

        System.out.println("-----");
    }
}
心之所向,素履以往 生如逆旅,一葦以航