复杂链表的复制
2017-06-25 17:28
190 查看
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
//周日 2017-6-25 @summer
//五六次自己写的程序出现段错误eu
//做不来
//借鉴书中的思路11点,老是提示错误
//1 克隆列表
// 2 设置随机
//3 拆分链表
// 克隆列表
//creat a node
if (pHead==NULL) return NULL;
// if(pHead->next==NULL) return pHead;
RandomListNode* pNode=pHead;
while(pNode)
{
RandomListNode* pt=new RandomListNode(pNode->label);
// pt->label=pNode->label;
pt->next=pNode->next;
pNode->next=pt;
//多此一举
// pt->random=NULL;
pNode=pt->next;
}
//设置随机域
//还是要循环
pNode=pHead;
RandomListNode* pt1=NULL;
// pt1=pNode->next;;
while(pNode)
{
pt1=pNode->next;
if(pNode->random)
//该节点的复制节点
pt1->random=pNode->random->next;
// if(pt1->next==NULL) break;
pNode=pt1->next;
// if(pNode)
// pt1=pNode->next;
}
//拆分链表
/* pNode=pHead;
//这里区别
RandomListNode* tmp=pHead->next;;
pt1=pHead;
// if(pNode)
// {
// pt1=tmp=pHead->next;
// pNode->next=pt1->next;
// pNode=pNode->next;
// }
while(pNode)
{
if(pt1->next==NULL)
{
break;
}
pNode->next=pt1->next;
pNode=pt1->next;
pt1->next=pNode->next;
pt1=pNode->next;
//这里出
//问题了
//pNode不是NULL
}
return tmp;*/
//拆分的时候错了。弄了一下午
RandomListNode *pCloneHead = pHead->next;
RandomListNode *tmp;
pNode= pHead;
while(pNode->next){
//第二个节点
tmp = pNode->next;
pNode->next =tmp->next;
pNode = tmp;
}
return pCloneHead;
}
};
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
//周日 2017-6-25 @summer
//五六次自己写的程序出现段错误eu
//做不来
//借鉴书中的思路11点,老是提示错误
//1 克隆列表
// 2 设置随机
//3 拆分链表
// 克隆列表
//creat a node
if (pHead==NULL) return NULL;
// if(pHead->next==NULL) return pHead;
RandomListNode* pNode=pHead;
while(pNode)
{
RandomListNode* pt=new RandomListNode(pNode->label);
// pt->label=pNode->label;
pt->next=pNode->next;
pNode->next=pt;
//多此一举
// pt->random=NULL;
pNode=pt->next;
}
//设置随机域
//还是要循环
pNode=pHead;
RandomListNode* pt1=NULL;
// pt1=pNode->next;;
while(pNode)
{
pt1=pNode->next;
if(pNode->random)
//该节点的复制节点
pt1->random=pNode->random->next;
// if(pt1->next==NULL) break;
pNode=pt1->next;
// if(pNode)
// pt1=pNode->next;
}
//拆分链表
/* pNode=pHead;
//这里区别
RandomListNode* tmp=pHead->next;;
pt1=pHead;
// if(pNode)
// {
// pt1=tmp=pHead->next;
// pNode->next=pt1->next;
// pNode=pNode->next;
// }
while(pNode)
{
if(pt1->next==NULL)
{
break;
}
pNode->next=pt1->next;
pNode=pt1->next;
pt1->next=pNode->next;
pt1=pNode->next;
//这里出
//问题了
//pNode不是NULL
}
return tmp;*/
//拆分的时候错了。弄了一下午
RandomListNode *pCloneHead = pHead->next;
RandomListNode *tmp;
pNode= pHead;
while(pNode->next){
//第二个节点
tmp = pNode->next;
pNode->next =tmp->next;
pNode = tmp;
}
return pCloneHead;
}
};
相关文章推荐
- 九度 题目1524:复杂链表的复制
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 剑指Offer24 复杂链表的复制
- 面试题26:复杂链表的复制
- 程序员面试题精选100题(49)-复杂链表的复制[算法]
- 链表面试题-复杂链表的复制
- LintCode(M) 复制带随机指针的复杂链表
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
- 复杂链表的复制
- 剑指offer 复杂链表的复制 (有向图的复制)
- 【笔试面试——26】链表06——复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 剑指offer之面试题26 复杂链表的复制 之 链表插入删除结点不断链不覆盖
- 剑指offer--面试题26:复杂链表的复制
- 【编程题目】复杂链表的复制☆
- 码农小汪-剑指Offer之23 -复杂链表的复制
- 复杂链表的复制
- 剑指Offer:复杂链表的复制
- 剑指offer 复杂链表的复制