复杂链表的复制
来源:互联网 发布:linux切换为root用户 编辑:程序博客网 时间:2024/05/28 18:43
复杂链表的复制
复杂链表不仅包括数据域和指针域,还包括一个random域,并且该域可以为空。
复杂链表的拷贝主要分为三步:
(1)拷贝原始链表的每一个节点,插入到当前节点的后面。
(2)调整random指针
(3)分离两个链表
代码实现:
#include#include typedef int DataType;typedef struct ComplexNode{DataType _data;struct ComplexNode* _next;struct ComplexNode* _random;}ComplexNode, *pComplexNode, *pComplexList;pComplexNode CreateComplexNode(DataType x){pComplexNode tmp = (pComplexNode)malloc(sizeof(ComplexNode));if (tmp == NULL){perror("malloc");return NULL;}tmp->_data = x;tmp->_next = NULL;tmp->_random = NULL;return tmp;}void Printf(pComplexList s1){pComplexNode cur = s1;while (cur){printf("[%d]->random->", cur->_data);if (cur->_random){printf("[%d]-->", cur->_random->_data);}else{printf("NULL-->");}cur = cur->_next;}}pComplexList CloneComplex(pComplexList plist){//拷贝原始链表的每一个节点,插入到当前节点的后面pComplexNode cur = plist;pComplexNode s1 = NULL;pComplexNode s2 = NULL;pComplexNode tail = NULL; while (cur){pComplexNode tmp = CreateComplexNode(cur->_data);tmp->_next = cur->_next;cur->_next = tmp;cur = cur->_next->_next;}//调整random指针cur = plist;while (cur){cur->_next->_random = cur->_random->_next;cur = cur->_next->_next;}//分离两个链表s1 = plist;if (s1){s2 = s1->_next;tail = s2;}while (tail->_next){s1->_next = tail->_next;s1 = s1->_next;tail->_next = s1->_next;tail = tail->_next;}s1->_next = NULL;return s2;}void Test(){pComplexList l1;pComplexNode cur1 = CreateComplexNode(1);pComplexNode cur2 = CreateComplexNode(2);pComplexNode cur3 = CreateComplexNode(3);pComplexNode cur4 = CreateComplexNode(4);cur1->_next = cur2;cur2->_next = cur3;cur3->_next = cur4;cur1->_random = cur4;cur2->_random = cur1;cur3->_random = cur2;cur4->_random = cur3;l1 = CloneComplex(cur1);Printf(cur1);printf("\n");Printf(l1);}
阅读全文
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- [python]python中str()与repr()的区别与联系
- tarjan算法总结
- Unity物体跟随鼠标的实现
- FEC改善UDP(RTP)传输音视频的问题
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
- 复杂链表的复制
- 少壮不努力,老大徒伤悲(我的外教课上的演讲稿)
- Stanford公开课《Programming Methodology》里面的Karel机器人的配置方法。
- JDBC连接MySQL数据库及示例
- java中static作用详解
- jq 数组操作、事件处理和相关处理函数的使用
- VS2017.Net Core问题:Add-Migration 命令问题
- 一点点学习思考
- 如何自学java迅速成为java高手