【求助】单链表的小小问题
//已经修改过了,运行之后老打印不出值来//那个大牛指教下啊,不胜感激
//node.h
#ifndef NOKE_h
#define NOKE_h
template <class T>
class node
{
public:
T data;
node<T> *nextptr;
node():data(0),nextptr(0){};
node(const T &info):data(info),nextptr(0){}
/*node(const T &info, node<T> *nextvalue=0){
data=info;
nextptr=nextvalue;
}
node( node<T>* nextvalue)
{
nextptr=nextvalue;
}*/
};
#endif
//nnklist.h
#ifndef NKLIST_H
#define NKLIST_H
#include "noke.h"
#include <iostream>
using namespace std;
template <class T>
class nklist :public node<T>
{
public:
nklist();//构造函数
bool isempty();//判断是否为空
void addlist(const T&);
void insert(const int,const T&);
void search(const T&);
void del(const int);
const T getvalue(const int);
node<T> *getptr(const int);//get upon node pointer
private:
node<T> *getnewnode(const T &);
node<T> *headptr;
node<T> *lastptr;
};
template <class T>
nklist<T>::nklist()//构造函数
{
headptr=new node<T>;
lastptr=headptr;
}
template <class T>
bool nklist<T>::isempty()
{
return headptr==lastptr;
}
template <class T>
void nklist<T>::addlist(const T &value)//后续添加节点
{
node<T>* ptr=getnewnode(value);
if(isempty()){
headptr->nextptr=ptr;
lastptr=ptr;
}
else{
lastptr->nextptr=ptr;
lastptr=ptr;
}
}
template <class T>
void nklist<T>::insert(const int p,const T &value)//插入节点
{
node<T>* ptr=getnewnode(value);
if(p==0)
{
ptr->nextptr=headptr->nextptr;
headptr->nextptr=ptr;
}
else
{
node<T>* q=getptr(p-1);
if(q==lastptr){
ptr=lastptr->nextptr;
lastptr=ptr;
}
else{
ptr->nextptr=q->nextptr;
q->nextptr=ptr;
}
}
}
template <class T>
void nklist<T>::search(const T &value)//查找值为value的节点
{
node<T>* p=headptr;
int count=1;
while(p!=lastptr)
{
if(p->data==value){
cout<<"value is found in "<<count<<"node"<<endl;
p=p->nextptr;
}
else
cout<<"value "<<value<<"is not found"<<endl;
}
}
template <class T>
void nklist<T>::del(const int p)//删除节点
{
node<T>* q=getptr(p-1);
if(q->nextptr==lastptr){
q->nextptr=0;
lastptr=q;
}
else{
q->nextptr=ptr->nextptr;
ptr->nextptr=0;
}
delete ptr;
}
template <class T>
const T nklist<T>::getvalue(const int p)
{
node<T>* q=getptr(p-1);
return q->data;
}
template <class T>
node<T> *nklist<T>::getptr(const int p)//取得第P个节点的指针
{
int count=0;
if(p==0)
return headptr;
node<T> *ptr=headptr;
while(count<p&&ptr!=lastptr){
ptr=ptr->nextptr;
count++;
}
if(count==p)
return ptr;
else
cout<<"指针越界"<<endl;
}
template <class T>
node<T> *nklist<T>::getnewnode(const T &value)//取得新的节点
{
node<T>* ptr=new node<T> (value);
return ptr;
}
#endif
//test.cpp
#include "nklist.h"
#include <iostream>
using namespace std;
int main()
{
nklist<int> nk;
int num=2;
for(int i=1;i<10;i++){
nk.addlist(num);
num+=2;
}
for(i=1;i<10;i++)
nk.getvalue(i);
return 0;
}
[ 本帖最后由 coolman366 于 2009-11-17 21:31 编辑 ]