链表面试题(四)

本文探讨了如何复制一个复杂的链表,其中每个节点不仅有next指针,还有random指针对应链表中的随机节点或NULL。复制过程分为三步:复制所有节点、设置新节点的random指针、拆分链表。
摘要由CSDN通过智能技术生成

复杂链表的复制。一个链表的每个节点,有一个next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。

思路:要实现这个功能,可以通过以下几个步骤。

  1. 每次创建新节点放在旧节点后边,先将所有的节点复制过来;
  2. 遍历所有老节点,设置老节点后面的新节点的random;
  3. 把链子拆开。
    这里写图片描述
头文件
#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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值