JAVA: 复杂链表的复制
2018-03-07 16:19
281 查看
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
分析:
在不用辅助空间的前提下,以O(n)的时间效率实现。
第一步:根据原始链表的每个结点N创建对应的N',把N'链接在N之后。
第二步:根据原链表,设置复制出来的结点的random指针。
第三步:把长链表拆分成两个链表,得到复制链表的头结点。
分析:
在不用辅助空间的前提下,以O(n)的时间效率实现。
第一步:根据原始链表的每个结点N创建对应的N',把N'链接在N之后。
第二步:根据原链表,设置复制出来的结点的random指针。
第三步:把长链表拆分成两个链表,得到复制链表的头结点。
public class test { public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } public RandomListNode Clone(RandomListNode pHead) { //第一步:复制每一个结点,并把其链接在原结点后面(如原A->B->C->D,现A->A'->B->B'->C->C'->D->D') RandomListNode Node=pHead; while(Node!=null){ RandomListNode copyNode=new RandomListNode(Node.label); copyNode.next=Node.next; copyNode.random=null; Node.next=copyNode; //移往下一个原结点 Node=copyNode.next; } //第二步:设置复制出来的结点的random指针 Node=pHead; //Node都指向原结点 while(Node!=null){ RandomListNode cNode=Node.next; if(Node.random!=null){ cNode.random=Node.random.next; //复制出来的新结点的random指针指向原Node的random指针(A)的next指针(A') } //移往下一个原结点 Node=cNode.next; } //第三步:断开链表 Node=pHead; RandomListNode copyHead=null; RandomListNode cNode=null; if(Node!=null){ copyHead=cNode=Node.next; //确定复制链表的头结点 Node.next=copyHead.next; //断开 Node=Node.next; } //移往下一个原结点 while(Node!=null){ cNode.next=Node.next; cNode=cNode.next; Node.next=cNode.next; Node=Node.next; } return copyHead; } }
相关文章推荐
- 剑指offer:复杂链表的复制(java)
- java 复杂链表的复制
- java 复杂链表的复制
- java 复制复杂链表
- 【剑指offer-Java版】26复杂链表的复制
- 复杂链表的复制(java版)
- 剑指Offer面试题26(Java版):复杂链表的复制
- Java面试题-实现复杂链表的复制代码分享
- 链表问题----复杂链表的复制+二叉搜索树与双向链表(Java)
- 剑指offer--面试题26:复杂链表的复制--Java实现
- 复杂链表的复制 java
- 剑指offer面试题26:复杂链表的复制Java实现
- 剑指Offer:面试题26——复制复杂的链表(java实现)
- 复杂链表的复制(Java实现)
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- 剑指offer(Java)-复杂链表的复制
- 【九度】题目1524:复杂链表的复制
- 复杂链表的复制
- 复制复杂链表
- 复杂链表的复制