35、复杂链表的赋值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongdileidechouzhu/article/details/79956588
public RandomListNode Clone(RandomListNode pHead)
    {
        if(pHead==null) return null;
        //将新链表每个节点插在旧链表对应的每个节点后面
        RandomListNode oldNode = pHead;
        while(oldNode!=null)
        {
            RandomListNode node = new RandomListNode(oldNode.label);
            node.next = oldNode.next;
            oldNode.next = node;
            oldNode = oldNode.next.next;
        }

        //将新链表每个节点的random指向自己前一个节点的random的下一个节点
        oldNode = pHead;
        while(oldNode!=null)
        {
            if(oldNode.random!=null)
            oldNode.next.random = oldNode.random.next;
            oldNode = oldNode.next.next;
        }

        //将链表根据奇偶分成旧新链表
        oldNode = pHead;
        RandomListNode head = oldNode.next;
        RandomListNode node = head;
        while(oldNode!=null)
        {
            RandomListNode oldNext = oldNode.next.next;
            if(oldNext!=null)
                node.next = oldNext.next;
            oldNode.next = oldNext;
            oldNode = oldNode.next;
            if(oldNode!=null)
                node = oldNode.next;
        }
        return head;
    }
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页