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;
    }
}

 

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