【数据结构】复杂链表的复制
来源:互联网 发布:win7网络连接受限 编辑:程序博客网 时间:2024/06/14 14:48
实现复杂链表的复制。
因为复杂链表中每个节点都有一个指向任意节点的指针。所以在确定这个链表的复制的时候。我们需要进行空间来换取时间上的效率。然后我们可以将链表复制项结合在拆分。
思路就这样。
我直接给出代码:
#pragma once#include <stdio.h>#include <malloc.h>#include <assert.h>typedef int DataType;typedef struct ComplexNode{DataType _data;// 数据struct ComplexNode* _next;// 指向下一个节点的指针struct ComplexNode* _random;// 指向随机节点}ComplexNode;void creatComplexNode(ComplexNode* &pHead,DataType x);ComplexNode* CopyComplexNode(ComplexNode* pHead);//创建复杂链表。void creatComplexNode(ComplexNode* &pHead,DataType x){ComplexNode *ret,*endNode;if(pHead == NULL){pHead = (ComplexNode*)malloc(sizeof(ComplexNode));pHead->_random = NULL;pHead->_data = x;pHead->_next = NULL;return;}endNode = pHead;ret = endNode;while(endNode->_next){ret = endNode;endNode = endNode->_next;}endNode->_next = (ComplexNode*)malloc(sizeof(ComplexNode));endNode = endNode->_next;endNode->_next = NULL;endNode->_data = x;endNode->_random = ret;}//解决复杂链表的复制。可以把其中的操作分为3个步骤://合并。//复制随机指针值。//拆分。ComplexNode *CopyComplexNode(ComplexNode *pHead){ComplexNode *copyNode;ComplexNode *pNode = pHead;ComplexNode *newLink = NULL;ComplexNode *newNode = NULL;assert(pHead);while(pNode != NULL){copyNode = (ComplexNode*)malloc(sizeof(ComplexNode));copyNode->_data = pNode->_data;copyNode->_next = pNode->_next;copyNode->_random = NULL;pNode->_next = copyNode;pNode = copyNode->_next;}pNode = pHead;while(pNode != NULL){copyNode = pNode->_next;if(pNode->_random != NULL){copyNode->_random = pNode->_random->_next;}pNode = copyNode->_next;}pNode = pHead;newLink = pNode->_next;while(pNode != NULL){newNode = pNode->_next;pNode->_next = newNode->_next;pNode = pNode->_next;if(newNode->_next != NULL)newNode->_next = pNode->_next;}return newLink;}
本文出自 “剩蛋君” 博客,转载请与作者联系!
0 0
- 【数据结构】关于复杂链表的复制
- 【数据结构】复杂链表的复制
- 【数据结构】单链表--复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 【数据结构】链表中倒数第k个结点
- 【C++】顺时针打印矩阵
- 【Linux】基本知识(1)
- 【数据结构】包含min函数的栈
- 【数据结构】栈的压入、弹出序列
- 【数据结构】复杂链表的复制
- 【C】字符串的排序
- 浅谈栈帧(一)
- 浅谈栈帧(二)
- 理解inode
- 关于vfork的一个问题
- Linux进程间通信:管道
- Linux进程间通信:消息队列
- Linux进程间通信:信号量