【剑指offer系列】 复杂链表的复制___26
来源:互联网 发布:重庆seo服务 编辑:程序博客网 时间:2024/05/19 13:08
题目描述:
请实现一个函数,实现复杂链表的复制。
在复杂链表中,每个节点除了有一个next指针指向下一个节点之外,还有一个sibling指针指向链表中的任意节点或者NULL
示例:
一个复杂链表的示例如下:
分析:
1)复制链表中的每一个节点,并用next指针链接
2)为每一个复制后的节点的sibling指针赋值,如A’->sibling = A->sibling->next
3)将链表按照奇偶顺序拆分链表
代码:
typedef struct listNode{ int val; struct listNode *next; struct listNode *sibling; listNode(int num):val(num),next(NULL),sibling(NULL){}}listNode; void cloneNodes(listNode *head){ //step 1 listNode *p=head; while(p){ listNode *dup=new listNode(p->val); dup->next=p->next; p->next=dup; p=dup->next; }}void connectSibling(listNode *head){ //step 2 listNode *p=head; while(p){ if(p->sibling){ p->next->sibling=p->sibling->next; } p=p->next->next; }}listNode *disconnectNodes(listNode *head){ //step 3 listNode *dupHead=head->next; listNode *p=head; listNode *q=dupHead; while(p){ p->next=q->next; p=p->next; q->next=p->next; q=q->next; } return dupHead;}listNode *duplicateList(listNode *head){ if(head==NULL) return NULL; cloneNodes(head); connectSibling(head); return disconnectNodes(head);}
0 0
- 【剑指offer系列】 复杂链表的复制___26
- 剑指offer系列源码-复杂链表的复制
- 剑指offer系列之24:复杂链表的复制
- 剑指offer系列-T26复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer--复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer:复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer-复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer:复杂链表的复制
- [剑指offer]复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer|复杂链表的复制
- opencl:C++11下使用别名(x,y,z,hi,lo...)访问vector类型(cl_int2,cl_long16...)的元素
- lanoj--1606--Funny Sheep(规律水题)
- S5PV210中断处理的编程实践1~2
- 滑动条
- C语言字符串转换为oc
- 【剑指offer系列】 复杂链表的复制___26
- jdk1.6容器-LinkedList源码
- Mybatis分页
- 线程饥饿死锁
- Splash闪屏页的使用方法
- JSON转为字典
- apt-get install E: Encountered a section with no Package: header 解决办法
- Double-Lock Checking
- 基于NodeBB的网站服务器迁移步骤