剑指offer-25-js-复杂链表的复制
来源:互联网 发布:罗马帝国 知乎 编辑:程序博客网 时间:2024/06/14 17:49
复杂链表的复制
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路一
- 递归思想:把大问题转换为若干小问题。
- 将复杂链表分为头结点和剩余结点两部分,剩余部分采用递归方法。
实现代码
function RandomListNode(x) { this.label = x; this.next = null; this.random = null;}function Clone(pHead) { if (!pHead) { return null; } // 复制头结点 var node = new RandomListNode(pHead.label); node.random = pHead.random; // 递归其他节点 node.next = Clone(pHead.next); return node;}
思路二
在旧链表中,复制每一个结点,并将复制的结点插入该结点后面。
- 遍历链表,初始化复制结点的random指向。
将链表拆分为原链表和复制所得链表。
实现代码
function RandomListNode(x){ this.label=x; this.next=null; this.random=null;}function Clone(pHead){ if(pHead===null){ return; } //复制每一个节点,并且将复制的结点放在原本结点的后面 var currentNode=pHead; while(currentNode!==null){ var clone=new RandomListNode(currentNode.label); clone.next=currentNode.next; currentNode.next=clone; currentNode=clone.next;//假如是A->A'->B,这个currrentnode是指B } //因为我们要设置复制的结点的random,所以要用clone.random=pHead.random.next //而pHead.random.next是在已经链接完毕之后才实现的,所以要重新遍历链表 //刚开始敲代码的时候,没有设置变量,直接用的pHead,错误; //若这样到下面这个循环的时候,pHead就变成尾节点了 currentNode=pHead; while(currentNode){ if(currentNode.random){//这个判断写成H.next!=null&&H!==null就报错,但是H!==null&&H.next!=null currentNode.next.random=currentNode.random.next; } currentNode=currentNode.next.next; } //拆分 var pCloneHead = pHead.next; var temp = null; currNode = pHead; while (currNode.next !== null) { tmp = currNode.next; currNode.next = tmp.next; currNode = tmp; } return pCloneHead; }
转自http://www.cnblogs.com/echovic/p/6517918.html,侵删
阅读全文
0 0
- 剑指offer-25-js-复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer--复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer:复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer-复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer:复杂链表的复制
- [剑指offer]复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer|复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指Offer:复杂链表的复制
- 剑指offer 复杂链表的复制
- NOIP 2010 普及组 复赛 sanguo 三国游戏
- 自定义实现消息转换器
- helloworld
- 打印日历
- 玲珑杯oj-1126咸鱼旅行
- 剑指offer-25-js-复杂链表的复制
- 第二十五天 面试总结
- Cows and Cars UVA
- C++ 中 std::vector存储const型对象报错
- Wooden Sticks HDU 1051
- MyBatis拦截器原理探究
- Sudoku Solver
- 数据库存储过程以及好处
- Spring 01