链表面试题之复杂链表的复制
来源:互联网 发布:网络口碑营销趋势 编辑:程序博客网 时间:2024/06/08 16:26
复杂链表的复制:一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个RandNext指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
//ps: 复杂链表的结构
struct ComplexNode
{
int data ; // 数据
struct ComplexNode * next; // 指向下一个节点的指针
struct ComplexNode * RandNext; // 指向随机节点(可以是链表中的任意节点 or 空)
};
方法一,先创建一个新链表在没有RandNext时与复杂链表完全相同,然后再通过遍历复杂链表的方法,一一给新链表的RandNext赋值,这样显然比较复杂。所以我们还有另一种方法
方法二:
- 在复杂链表的每一个节点后面加一个节点的复制,链成一个新的链表
- 我们可以看出规律,要复制原链表,就是原链表节点randnext指向的节点的next赋给原链表节点的next的randnext
- 分离两个链表
//添加新的节点,并赋值void ListInser(ListNode **ppList, int x){ *ppList = (ListNode *)malloc(sizeof(ListNode)); (*ppList)->data = x;}ListNode *ListCopy(ListNode *pList) //复杂链表的复制{ if(pList == NULL) { return NULL; } ListNode *cur = pList; ListNode* NewListNode = NULL; while(cur != NULL) { ListInser(&NewListNode, cur->data);//添加节点 NewListNode->next = cur->next;//新节点插到该节点的后面 cur->next = NewListNode; cur = cur->next->next;//向后走 } cur = pList; while(cur) { cur->next->RandNext = cur->RandNext->next; //2.randnext的赋值 cur = cur->next->next; } NewListNode = pList->next;//新链表头指针为NewListNode cur = pList; ListNode *Newcur = NewListNode; while(cur)//分离链表 { cur->next = cur->next->next;// Newcur->next = cur->next; cur = cur->next; Newcur = Newcur->next; } return NewListNode;}
测试结果:
阅读全文
0 0
- 链表面试题之复杂链表的复制
- 链表面试题之复杂链表的复制
- 单链表面试题--复杂链表的复制
- 链表面试题(进阶)&&复杂链表的复制
- 链表面试题总结----(可能带环相交问题+复杂链表的复制)
- 面试题之--复杂链表的复制
- 【面试题】复杂链表的复制
- 面试题:复杂链表的复制
- C语言 — 链表面试题复杂链表问题
- 牛客网刷题之复杂链表的复制
- 经典面试题之复杂链表复制的简单实现
- 剑指offer面试题26之复杂链表的复制
- 剑指offer之面试题26:复杂链表的复制
- 剑指offer面试题26之复杂链表的复制问题
- 剑指Offer之面试题26:复杂链表的复制
- 程序员面试题精选---复杂链表的复制
- 面试题26:复杂链表的复制
- [剑指offer][面试题26]复杂链表的复制
- web页面引用OCX控件,客户端浏览器设置
- PAT乙级真题及训练集(6)--1008. 数组元素循环右移问题 (20)
- php-15
- leetcode48. Rotate Image
- Ubuntu下的chrome闪烁
- 链表面试题之复杂链表的复制
- 主题四 指针和数组(下)----25.指针数组与数组指针分析
- 欢迎使用CSDN-markdown编辑器
- Bootstrap与Foundation的区别
- HART协议理解
- [USACO1.5]特殊的质数肋骨 Superprime Rib
- 3. 内部命令(Internal Command)和外部命令(External Command)
- cmd提示 'node' 不是内部或外部命令,也不是可运行的程序
- php-16