【数据结构】复杂链表的复制

来源:互联网 发布: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
原创粉丝点击