求助各位大神找错!!!
编译和链接过程都没有错~但是每次遍历链表的时候总是弹出 “XXX.exe 已停止工作” 程序哪里错了么??
#ifndef AA_H
#define AA_H
template <class T>
class LinkList;
template <class T>
class Node
{
public:
friend class LinkList<T>;
private:
T data;
Node<T> *next;
};
template <class T>
class LinkList
{
public:
LinkList();
LinkList(T a[],int n);
void insert(int i,T item);
T del(int i);
void getAll();
private:
Node<T> *head;
};
#endif
#include<iostream>
#include"aa.h"
using namespace std;
template <class T>
LinkList<T>::LinkList() //有头节点
{
head=new Node<T>;
head->next=NULL;
}
template <class T>
LinkList<T>::LinkList(T a[],int n)
{
Node<T> *rear,*s;int i;
head=new Node<T>;
rear=head;
for(i=0;i<n;i++)
{
s=new Node<T>;
s->data=a[i];
s->next=NULL;
rear->next=s;
rear=rear->next;
}
}
template <class T>
void LinkList<T>::insert(int i,T item)
{
Node<T> *p=head->next;
int j=1;
while(p->next!=head&&j<i-1)
{
p=p->next;
j++;
}
if(p->next==head)
cout<<"wrong number"<<endl;
else
{
Node<T> *s;
s=new Node<T>;
s->data=item;
s->next=p->next;
p->next=s;
}
}
template <class T>
T LinkList<T>::del(int i)
{
Node<T> *p=head->next;
int j=1;
while(p->next!=head&&j<i-1)
{
p=p->next;
j++;
}
if(p->next==head)
cout<<"wrong number"<<endl;
else
{
Node<T> *q=p->next;
T x=q->data;
p->next=q->next;
delete q;
return x;
}
}
template <class T>
void LinkList<T>::getAll()
{
Node<T> *p=head->next;
while(p!=head)
{
cout<<p->data<<endl;
p=p->next;
}
}
#include<iostream>
#include"aa.cpp"
using namespace std;
int main()
{
cout<<"***********************************"<<endl;
cout<<" 1--在第i个位置插入元素item"<<endl;
cout<<" 2--删除链表的第i个元素"<<endl;
cout<<" 3--遍历链表"<<endl;
cout<<"***********************************"<<endl;
int n;
cout<<"输入链表长度"<<endl;
cin>>n;
double *data= new double[n];
cout<<"enter items"<<endl;
for(int i=0;i<n;i++)
cin>>data[i];
LinkList<double> list(data,n);
cout<<"选择一个调用方法"<<endl;
while(1){
int i;
cin>>i;
switch(i){
case(1):
{
cout<<"输入插入位置及数据"<<endl;
int x;double y; cin>>x>>y;
list.insert(x,y);cout<<"选择一个调用方法"<<endl;break;}
case(2):
{
cout<<"输入位置i,并删除"<<endl;
int c;cin>>c;
cout<<list.del(c)<<endl;cout<<"选择一个调用方法"<<endl;break;}
case(3):
{
cout<<"get all datas"<<endl;
list.getAll();cout<<"选择一个调用方法"<<endl;break;}
default: cout<<"选择正确号码"<<endl;break;
}
}
return 0;
}