双向链表的复制构造函数

ankong1 2009-02-21 01:50:17
//---------------node.h--------------------------
#ifndef CHAINNODEH
#define CHAINNODEH

template<typename T> class DoubleList; //声明Double类

template<typename T>
class DoubleNode{
private:
friend DoubleList<T>; //设Double为本类的朋友

DoubleNode():left(NULL),right(NULL){}

DoubleNode(const T item,DoubleNode<T> *prior = NULL, DoubleNode<T> *next = NULL)
:data(item),left(prior),right(next){}

~DoubleNode(){
left = NULL;
right = NULL;
}

public:
T GetData();

private:

T data; //内部数据
DoubleNode<T> *left, *right; //指针左右

};

template<typename T>
T DoubleNode<T>::GetData(){ //查寻几号位的数据


return this->data;

}
#endif

//------------------DoubleList.h------------------------
#ifndef DOUBLEH
#define DOUBLEH
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "node.h"
#include "except.h"
using namespace std;
template<class T>
class DoubleList{
public:
DoubleList():head( new DoubleNode<T>() ){
head->left = head;
head->right = head;
}

//拷贝构造函数不知道这么做。麻烦指点下 。

~DoubleList(){
MakeEmpty();
delete head;
}
void MakeEmpty(); //使表变空
int Length() const; //判断长度
DoubleNode<T> *Find(int n=0) const; //查找
DoubleNode<T> *FindData(T item); //find the data which is equal to item
int Search(const T& x) const; // 搜寻
bool Insert( T item,int n);
T Remove(int n=0); //delete the nth data
T Get(int n=0); // 获得第N个数据
void Print(); //print the list
private:
DoubleNode<T> *head;
}; //class Double



//--------------------------------
最好能给出代码。
...全文
237 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
old-six-programmer 2009-02-21
  • 打赏
  • 举报
回复
我随便写了段代码
将你的链表无参构造函数改了一下


class DoubleList
{
public:
DoubleList():head( new DoubleNode <T>() )
{
}
DoubleList( const DoubleList<T>& list )
{
DoubleNode<T>* p = list.head;

DoubleNode<T>* pPre = NULL;
DoubleNode<T>* pCur = new DoubleNode<T>();
while( 1 )
{
pCur->data = p->data;

pCur->left = pPre;

if( p->right )
pCur->right = new DoubleNode<T>();
else
{
pCur->right = NULL;
break;
}

p = p->right;
pPre = pCur;
pCur = pCur->right;
}
}

//我自己添加的函数,用于在链表尾部添加节点,用来测试
void Add( T item )
{
if( head )
{
DoubleNode<T>* p = head;

while( p->right )
p = p->right;

p->right = new DoubleNode<T>( item );
p->right->left = p;
}
else
{
head = new DoubleNode<T>( item );
}
}
private:
DoubleNode <T> *head;
};

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧