首页 > 其他 > 详细

【剑指offer】复杂链表的复制

时间:2019-04-15 23:14:02      阅读:131      评论:0      收藏:0      [点我收藏+]

参考博客:https://blog.csdn.net/willduan1/article/details/53352759

第三种解法很巧妙

 

主要思路分为三步:

1.复制每个节点的label和next,紧插在该节点后面

2.复制random指针

技术分享图片

3.拆分链表

技术分享图片

    public RandomListNode Clone(RandomListNode pHead) {
        if (pHead == null)
            return null;

        //复制并插入
        RandomListNode p = pHead;
        while (p != null) {
            RandomListNode tmp = new RandomListNode(p.label);
            tmp.next = p.next;
            p.next = tmp;
            p = tmp.next;
        }

        //复制random指针
        p = pHead;
        while (p != null) {
            if (p.random != null)
                p.next.random = p.random.next;
            p = p.next.next;
        }

        //拆分链表
        RandomListNode head = pHead.next;
        RandomListNode q = head;
        p = pHead;
        while (q.next != null){
            p.next = q.next;
            p = p.next;

            q.next = p.next;
            q = q.next;
        }
        p.next = null;
        return head;

    }

 

【剑指offer】复杂链表的复制

原文:https://www.cnblogs.com/fafa23/p/10713435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!