牛客网刷题之复杂链表的复制

来源:互联网 发布:发型设计软件免费版 编辑:程序博客网 时间:2024/06/07 15:34

题目描述:

这里写图片描述

解题思路:

过程分为三步:
首先,遍历链表,复制当前结点currentNode对应的结点cloneCurNode,并将cloneCurNode放置在currentNode的后面,这样就形成一条包含原始链以及复制链的长链。

这里写图片描述

然后,还需将原始链中指针的方向赋予复制链

这里写图片描述

最后,将长链拆分,就得到原始链和复制链了。

这里写图片描述

题解:

public RandomListNode Clone(RandomListNode pHead) {            if(pHead == null){                return null;            }            //复制结点            RandomListNode currentNode = pHead;            while(currentNode != null){                RandomListNode cloneNode = new RandomListNode(currentNode.label);                cloneNode.next = currentNode.next;                currentNode.next = cloneNode;                currentNode = cloneNode.next;            }            //复制指针指向            currentNode = pHead;            while(currentNode != null){                RandomListNode cloneNode = currentNode.next;                if(currentNode.random != null){                    cloneNode.random = currentNode.random.next;                }                currentNode = cloneNode.next;            }            //拆分长链            currentNode = pHead;            RandomListNode cloneHead = pHead.next;            RandomListNode tempNode;            while(currentNode.next != null){                tempNode = currentNode.next;                currentNode.next = tempNode.next;                currentNode = tempNode;            }            return cloneHead;        }

ac结果:

这里写图片描述

0 0
原创粉丝点击