![]() |
#2
yuccn2014-03-30 13:33
|

//节点类定义
#ifndef NODE_H_
#define NODE_H_
#include <iostream>
#include <cstdlib>
template<typename T> class LinkList;
template<typename T>
class Node
{
public:
friend class LinkList<T>;
public:
T value;
Node<T>* next;
public:
//Node(NULL):next(NULL){NULL;};
Node(){next=NULL;}
Node(const T& T1){value=T1,next=NULL;};
T& GetValue(void){return value;}
Node<T>* GetNext(){return next;}
};
#endif
//链表类定义
#include <iostream>
#include "Node.h"
using namespace std;
template <typename T>
class LinkList
{
private:
Node<T>* p_Head;
public:
LinkList(void);
~LinkList(void);
void clear(void);
T& visit(size_t pos);
void Insert(const size_t pos,const T& value);
void add(const T& value);
size_t getLengh(void) const;
void remove(const size_t pos);
size_t search(const T& value0) const;
};
template <typename T>
LinkList<T>::LinkList(void)
{
p_Head=new Node<T>();
}
template <typename T>
LinkList<T>::~LinkList(void)
{
clear();
delete p_Head;
}
template <typename T>
void LinkList<T>::clear()
{
while(!p_Head->next)
{
p_Head=p_Head->next;
delete p_Head->next;
}
}
template <typename T>
T& LinkList<T>::visit(size_t pos)
{
Node<T>* prev=p_Head;
for(int i=0;i<pos+1&&prev!=NULL;i++)
{
prev=prev->next;
}
return prev->value;
}
template <typename T>
void LinkList<T>::Insert(const size_t pos, const T &value)
{
Node<T>* prev=p_Head;
Node<T>* newlist=new Node<T>(value);
for(int j=0;j<pos&&prev!=NULL;j++)
{
prev=prev->next;
}
prev->next=newlist->next;
newlist->next=prev->next->next;
}
template <typename T>
void LinkList<T>::add(const T &value)
{
Node<T>* prev=p_Head;
while(prev!=NULL)
{
prev=prev->next;
}
Node<T>* newlist=new Node<T>(value);
newlist->next=prev->next; //出现错误的地方,不知道为什么
prev->next=newlist;
}
template <typename T>
size_t LinkList<T>::getLengh() const
{
int i=0;
Node<T>* prev=p_Head;
while(prev->next!=NULL)
{
prev=prev->next;
i++;
}
return i;
}
template <typename T>
void LinkList<T>::remove(const size_t pos)
{
Node<T>* prev=p_Head;
for(int i=0;i<pos&&prev!=NULL;i++)
{
prev=prev->next;
}
Node<T>* savelist=prev->next;
prev->next=prev->next->next;
delete savelist;
}
template <typename T>
size_t LinkList<T>::search(const T &value0) const
{
Node<T>* prev=p_Head;
int i=0;
while(prev->value!=value0)
{
prev=prev->next;
i++;
}
return i;
}
//主函数
#include "LinkList.h"
#include <iostream>
using namespace std;
void main()
{
//cout<<"nihao"<<endl;
int num=10;
LinkList<int> link;
link.add(1);
link.add(2);
link.add(3);
link.add(5);
link.add(100);
cout<<link.getLengh()<<endl;
}
错误在add函数里 已经标明错误之处
#ifndef NODE_H_
#define NODE_H_
#include <iostream>
#include <cstdlib>
template<typename T> class LinkList;
template<typename T>
class Node
{
public:
friend class LinkList<T>;
public:
T value;
Node<T>* next;
public:
//Node(NULL):next(NULL){NULL;};
Node(){next=NULL;}
Node(const T& T1){value=T1,next=NULL;};
T& GetValue(void){return value;}
Node<T>* GetNext(){return next;}
};
#endif
//链表类定义
#include <iostream>
#include "Node.h"
using namespace std;
template <typename T>
class LinkList
{
private:
Node<T>* p_Head;
public:
LinkList(void);
~LinkList(void);
void clear(void);
T& visit(size_t pos);
void Insert(const size_t pos,const T& value);
void add(const T& value);
size_t getLengh(void) const;
void remove(const size_t pos);
size_t search(const T& value0) const;
};
template <typename T>
LinkList<T>::LinkList(void)
{
p_Head=new Node<T>();
}
template <typename T>
LinkList<T>::~LinkList(void)
{
clear();
delete p_Head;
}
template <typename T>
void LinkList<T>::clear()
{
while(!p_Head->next)
{
p_Head=p_Head->next;
delete p_Head->next;
}
}
template <typename T>
T& LinkList<T>::visit(size_t pos)
{
Node<T>* prev=p_Head;
for(int i=0;i<pos+1&&prev!=NULL;i++)
{
prev=prev->next;
}
return prev->value;
}
template <typename T>
void LinkList<T>::Insert(const size_t pos, const T &value)
{
Node<T>* prev=p_Head;
Node<T>* newlist=new Node<T>(value);
for(int j=0;j<pos&&prev!=NULL;j++)
{
prev=prev->next;
}
prev->next=newlist->next;
newlist->next=prev->next->next;
}
template <typename T>
void LinkList<T>::add(const T &value)
{
Node<T>* prev=p_Head;
while(prev!=NULL)
{
prev=prev->next;
}
Node<T>* newlist=new Node<T>(value);
newlist->next=prev->next; //出现错误的地方,不知道为什么
prev->next=newlist;
}
template <typename T>
size_t LinkList<T>::getLengh() const
{
int i=0;
Node<T>* prev=p_Head;
while(prev->next!=NULL)
{
prev=prev->next;
i++;
}
return i;
}
template <typename T>
void LinkList<T>::remove(const size_t pos)
{
Node<T>* prev=p_Head;
for(int i=0;i<pos&&prev!=NULL;i++)
{
prev=prev->next;
}
Node<T>* savelist=prev->next;
prev->next=prev->next->next;
delete savelist;
}
template <typename T>
size_t LinkList<T>::search(const T &value0) const
{
Node<T>* prev=p_Head;
int i=0;
while(prev->value!=value0)
{
prev=prev->next;
i++;
}
return i;
}
//主函数
#include "LinkList.h"
#include <iostream>
using namespace std;
void main()
{
//cout<<"nihao"<<endl;
int num=10;
LinkList<int> link;
link.add(1);
link.add(2);
link.add(3);
link.add(5);
link.add(100);
cout<<link.getLengh()<<endl;
}
错误在add函数里 已经标明错误之处