Copy LinkedList With Arbitrary Node

To copy a linked list. Every node's next point to the next node, and another point to an arbitrary node.
	//time complexity: O(n), space: O(1)
	public Node copyList(Node head) {
	    if(head == null) return null;
	    Node original = head;
	    Node copy = null;
	    while(original != null) {
	        copy = new Node(original.val);
	        copy.next = original.next;
	        original.next = copy;
	        original = copy.next;
	    }
	    original = head;
	    copy = original.next;
	    while(original != null) {
	        original.next.arb = original.arb.next;//consider every node will not point to null
	        original = original.next.next;
	        
	    }
	    original = head;
	    copy = original.next;
	    Node result = copy;
	    while(original != null) {
	        original.next = original.next.next;
	        original = original.next;
	        if(copy.next != null) {
	            copy.next = copy.next.next;
	            copy = copy.next;
	        }
	    }
	    return result;
	}

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章