博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂链表的复制
阅读量:4625 次
发布时间:2019-06-09

本文共 1441 字,大约阅读时间需要 4 分钟。

  题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。

  复杂链表的结构如下:

1 struct RandomListNode {2     int label;3     struct RandomListNode *next, *random;4     RandomListNode(int x) :5             label(x), next(NULL), random(NULL) {6     }7 };

  代码如下:

1 RandomListNode* Clone(RandomListNode* pHead){ 2         if(!pHead) return NULL; 3         RandomListNode *currNode = pHead; 4         //复制原始链表的任意节点N并创建新节点N',并把N'连接到N的后面 5         while(currNode){ 6             RandomListNode *node = new RandomListNode(currNode->label); 7             node->next = currNode->next; 8             currNode->next = node; 9             currNode = node->next;10         }11         currNode = pHead;12         13         //如果原始链表上的节点N的random指向S,则它对应的复制节点N'的random指向S的下一个节点S'14         while(currNode){15             RandomListNode *node = currNode->next;16             if(currNode->random){               17                 node->random = currNode->random->next;18             }19             currNode = node->next;20         }21         //把第二步得到的链表拆分成两个链表,奇数位置上的节点组成原始链表,偶数位置上的节点组成复制出来的链表22         RandomListNode *pCloneHead = pHead->next;23         RandomListNode *tmp;24         currNode = pHead;25         while(currNode->next){26             tmp = currNode->next;27             currNode->next =tmp->next;28             currNode = tmp;29         }30         return pCloneHead;31 }

 

转载于:https://www.cnblogs.com/yangrenzhi/p/5801768.html

你可能感兴趣的文章
mongo二维数组操作
查看>>
localStorage之本地储存
查看>>
Archlinux 交换左Ctrl和Cap键
查看>>
#openstack故障处理汇总
查看>>
搜索旋转排序数组 II
查看>>
20、docker swarm
查看>>
psp工具软件前景与范围文档
查看>>
day06-三元表达式
查看>>
C# DateTime.Now详细用法
查看>>
Php中"{}"大括号的用法总结(转)
查看>>
JavaScript内存优化
查看>>
BZOJ1059: [ZJOI2007]矩阵游戏(二分图匹配)
查看>>
P3385 【模板】负环
查看>>
URI、URL 和 URN的区别
查看>>
根据表达式序列(前缀、中缀、后缀)构建表达式树
查看>>
mysql性能优化
查看>>
【SqlServer系列】语法定义符号解析
查看>>
Color Length UVA - 1625
查看>>
TLS/SSL
查看>>
zoj2319Beautiful People Dp
查看>>