复杂链表包括一个next指针域和一个random指针域,random指针域可以任意指向
#define _CRT_SECURE_NO_WARNINGS 1
#include"ComplexList.h"
pComplexNode CreateNode(Datatype d)
{
pComplexNode tmp = (pComplexNode)malloc(sizeof(ComplexNode));
if (tmp == NULL)
{
perror("malloc");
return NULL;
}
tmp->Data = d;
tmp->next = NULL;
tmp->random = NULL;
return tmp;
}
void printComplexList(pComplexList plist)
{
pComplexNode cur = plist;
while (cur)
{
printf("[%d]-->", cur->Data);
if (cur->random)
{
printf("[random:%d]\n", cur->random->Data);
}
else
{
printf("NULL\n");
}
cur = cur->next;
}
printf("\n");
}
pComplexList CloneComplexList(pComplexList plist) //复制复杂链表
{
pComplexNode cur = plist;
pComplexNode tail = NULL;
pComplexList L1 = NULL;
pComplexList L2 = NULL;
while (cur) //插入相同元素
{
pComplexNode tmp = CreateNode(cur->Data);
tmp->next = cur->next;
cur->next = tmp;
cur = cur->next->next;
}
cur = plist;//cur 重新指向表头
while (cur)//复制原有的random
{
cur->next->random = cur->random->next;
cur = cur->next->next;
}
L1 = plist;
L2 = L1->next;
tail = L2;
while (tail->next)//将链表分离
{
L1->next = tail->next;
L1 = L1->next;
tail->next = L1->next;
tail = tail->next;
}
L1->next = NULL;
return L2;
}
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __ComplexList_H__
#define __ComplexList_H__
#include<stdio.h>
#ifndef __ComplexList_H__
#define __ComplexList_H__
#include<stdio.h>
typedef int Datatype;
typedef struct ComplexNode
{
Datatype Data;
struct ComplexNode* next;
struct ComplexNode* random;
}ComplexNode, *pComplexNode, *pComplexList;
pComplexNode CreateNode(Datatype d);
void printComplexList(pComplexList plist);
pComplexList CloneComplexList(pComplexList plist);
#endif
typedef struct ComplexNode
{
Datatype Data;
struct ComplexNode* next;
struct ComplexNode* random;
}ComplexNode, *pComplexNode, *pComplexList;
pComplexNode CreateNode(Datatype d);
void printComplexList(pComplexList plist);
pComplexList CloneComplexList(pComplexList plist);
#endif
#define _CRT_SECURE_NO_WARNINGS 1
#include"ComplexList.h"
#include"ComplexList.h"
int main()
{
pComplexNode cur1 = CreateNode(1);
pComplexNode cur2 = CreateNode(2);
pComplexNode cur3 = CreateNode(3);
pComplexNode cur4 = CreateNode(4);
cur1->next = cur2;
cur2->next = cur3;
cur3->next = cur4;
cur1->random = cur4;
cur4->random = cur3;
cur3->random = cur2;
cur2->random = cur1;
printComplexList(cur1);
pComplexList tmp = CloneComplexList(cur1);
printComplexList(tmp);
system("pause");
return 0;
}
{
pComplexNode cur1 = CreateNode(1);
pComplexNode cur2 = CreateNode(2);
pComplexNode cur3 = CreateNode(3);
pComplexNode cur4 = CreateNode(4);
cur1->next = cur2;
cur2->next = cur3;
cur3->next = cur4;
cur1->random = cur4;
cur4->random = cur3;
cur3->random = cur2;
cur2->random = cur1;
printComplexList(cur1);
pComplexList tmp = CloneComplexList(cur1);
printComplexList(tmp);
system("pause");
return 0;
}