复杂链表的复制。一个链表的每个节点,有一个next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
思路:要实现这个功能,可以通过以下几个步骤。
- 每次创建新节点放在旧节点后边,先将所有的节点复制过来;
- 遍历所有老节点,设置老节点后面的新节点的random;
- 把链子拆开。
头文件
#ifndef __CLIST_H__
#define __CLIST_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <time.h>
typedef int DataType;
typedef struct CList
{
DataType data;
struct CList *pRandom;
struct CList *pNext;
}CList;
//初始化
void Init(CList **ppFirst);
//销毁
void Destory(CList **ppFirst);
//前插
void PushFront(CList **ppFirst,DataType data);
//查找
CList *Find(CList *pFirst,DataType data);
//设置random
void SetRandom(CList **ppFirst,int size);
//打印
void Print(CList *pFirst);
//复制
CList *CopyCList(CList *pFirst);
//测试复制
void TestCopyClist();
#endif //__CLIST_H__
函数实现部分源程序
#include "CList.h"
//初始化
void Init(CList **ppFirst)
{
*ppFirst =