ARTS-6-算法練習-隨機鏈表的深度拷貝

概述:
左耳朵耗子專欄《左耳聽風》 用戶自發每週完成一個ARTS:

1.Algorithm:每週至少做一個 leetcode 的算法題

2.Review:閱讀並點評至少一篇英文技術文章

3.Tip:學習至少一個技術技巧

4.Share:分享一篇有觀點和思考的技術文章

 

Algorithm
題目概述:

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

代碼:

public class RandomListNodeDemo {

    class RandomListNode {
        int label;
        RandomListNode next, random;

        RandomListNode(int x) {
            this.label = x;
        }
    }


    public RandomListNode copyRandomList(RandomListNode head) {
        RandomListNode p, copy;
        if (head == null) {
            return null;
        }
        //首先我們需要複製鏈表的內容
        for (p = head.next; p != null; p = p.next) {
            copy = new RandomListNode(p.label);
            copy.next = p.next;
            p.next = copy;
            p = copy;
        }
        for (p = head; p!=null; p = p.next) {
            copy = p.next;
            copy.random =(p.random!=null?p.random.next:null);
        }
        RandomListNode newHead=copy=head.next;
        for(p=head;p!=null;){
            p=p.next=copy.next;
            copy=copy.next=(p!=null?p.next:null);
        }
        return newHead;
    }
}

 

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