复杂链表的复制
2017-09-22 19:29
274 查看
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路:分成三步走
1.在原结点后面加入复制结点,原链表长度变为2倍
2.将复制节点的random值设为源节点的random值的next
3.分离两个链表
思路:分成三步走
1.在原结点后面加入复制结点,原链表长度变为2倍
2.将复制节点的random值设为源节点的random值的next
3.分离两个链表
/* public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } */ public class Solution { public RandomListNode Clone(RandomListNode pHead) { RandomListNode pNode = pHead; if(pHead == null)return null; //遍历链表,每个结点后面都添加一个复制的结点 while(pNode != null){ RandomListNode randomNode = new RandomListNode(pNode.label); randomNode.next = pNode.next; pNode.next = randomNode; pNode = randomNode.next; } pNode = pHead; RandomListNode pNewNode; //设置上随机指针 while(pNode != null){ pNewNode = pNode.next; if(pNode.random != null) pNewNode.random = pNode.random.next; pNode = pNewNode.next; } RandomListNode pNewHead = null; pNode = pHead; //分离链表 while(pNode != null){ if(pNewHead == null) pNewHead = pNode.next; pNewNode = pNode.next; pNode.next = pNewNode.next; pNode = pNode.next; if(pNode != null) pNewNode.next = pNode.next; } return pNewHead; } }
相关文章推荐
- IMWeb提升营Day5 | 训练题25:复杂链表的复制
- 25、复杂链表的复制
- 复杂链表的复制
- 26 - 复杂链表的复制
- 【剑指Offer面试题】 九度OJ1524:复杂链表的复制
- 【剑指offer】复杂链表的复制
- 【面试题026】复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 面试题26:复杂链表的复制
- 复杂链表的复制
- 26 复杂链表的复制
- 复杂链表的复制
- 面试算法(二十五)复杂链表的复制
- 剑指Offer之 - 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 《剑指offer》——复杂链表的复制
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
- 剑指offer 复杂链表的复制