【数据结构】单链表--复杂链表的复制
来源:互联网 发布:淘宝店如何增加销量 编辑:程序博客网 时间:2024/06/05 02:34
在学习链表的最后,我们接触了复杂链表。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
首先定义链表结构:
typedef struct ComplexNode//复杂链表的结构{DataType data;struct ComplexNode *_next;struct ComplexNode *_random;}ComplexNode;复杂链表的动态开辟,与主函数的测试:
ComplexNode *BuyComplexNode(DataType x)//复杂链表的动态开辟{ComplexNode *node = (ComplexNode*)malloc(sizeof(ComplexNode));node->data = x;node->_next = NULL;node->_random = NULL;return node;}//复杂链表的复制void TestList(){ComplexNode *node1 = BuyComplexNode(1);ComplexNode *node2 = BuyComplexNode(2);ComplexNode *node3 = BuyComplexNode(3);ComplexNode *node4 = BuyComplexNode(4);ComplexNode *node5 = BuyComplexNode(5);node1->_next = node2;node1->_random = node3;node2->_next = node3;node2->_random = node1;node3->_next = node4;node3->_random = NULL;node4->_next = NULL;node4->_random = node4;ComplexNode *node = CopyComNode(&node1);}int main(){TestList();return 0;}复杂链表复制的方法思想:
ComplexNode* CopyComNode(ComplexNode **ppList)//复制复杂链表{ComplexNode *cur = *ppList;ComplexNode *node = *ppList;//节点插在后面while (*ppList){ComplexNode *Node = BuyComplexNode((*ppList)->data);ComplexNode *tmp = (*ppList)->_next;(*ppList)->_next = Node;Node->_next = tmp;*ppList = tmp;}//新节点的random置好while (cur){if (cur->_random)cur->_next->_random = cur->_random->_next;elsecur->_next->_random = NULL;cur = cur->_next->_next;}//取出新节点ComplexNode *first = node->_next;*ppList = node;while (node){ComplexNode *tmp = node->_next;node->_next = node->_next->_next;if (tmp->_next)tmp->_next = tmp->_next->_next;elsetmp->_next = NULL;node = node->_next;}return first;}
阅读全文
0 0
- 【数据结构】单链表--复杂链表的复制
- 【数据结构】关于复杂链表的复制
- 【数据结构】复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- webstorm快捷键
- 破解微信本地数据库,无法找回删除的聊天记录
- javascript的setTimeout()用法总结,js的setTimeout()方法
- Android 内置外置存储器区别
- php要学哪些才能最快的学好
- 【数据结构】单链表--复杂链表的复制
- java 如何跳出指定的for循环
- 获取传入月份的最后一天
- 【Jsoup in action】模拟浏览器:post方式模拟登陆获取网页数据(二)
- centos:mysql更改密码和设置远程登录,更改默认字符
- mac node 安装
- term查询
- js执行上下文
- UIColor+Hex