用c++编写一个函数:从给定的链表A中删除元素值在x到y(x<=y)间的所有元素.
谢谢了!!
没人理.....
#include<iostream.h>
template <class T>
struct Node
{
T data;
Node<T> *next; //此处<T>也可以省略
};
template <class T>
class LinkList
{
public:
LinkList( ); //建立只有头结点的空链表
LinkList(T a[ ], int n); //建立有n个元素的单链表
~LinkList(); //析构函数
void PrintList( );//遍历单链表,按序号依次输出各元素
void del_x_y(T x,T y);
private:
Node<T> *first; //单链表的头指针
};
template <class T>
LinkList<T>:: LinkList( )
{
first=new Node<T>; first->next=NULL;
}
template <class T>
LinkList<T>:: LinkList(T a[ ], int n)
{
first=new Node<T>; //生成头结点
Node<T> *r,*s;
r=first; //尾指针初始化
for (int i=0; i<n; i++)
{
s=new Node<T>; s->data=a[i]; //为每个数组元素建立一个结点
r->next=s; r=s; //插入到终端结点之后
}
r->next=NULL; //单链表建立完毕,将终端结点的指针域置空
}
template <class T>
LinkList<T>:: ~LinkList()
{
}
template <class T>
void LinkList<T>::PrintList( )
{
Node<T> *p;
p=first->next;
while (p)
{
cout<<p->data<<endl;
p=p->next;
}
}
template <class T>
void del_x_y(T x,T y){
Node<T> *p; int j;
p=first ; j=0; //工作指针p初始化
while(p){
p=p->next;
j++;
}
if (!p || !p->next) throw "位置"; //结点p不存在或结点p的后继结点不存在
else if( p->data >= x && p->data <= y){
Node<T> *q;
q=p->next; //暂存被删结点
p->next=q->next; //摘链
delete q;
}
void main( )
{int r[ ]={1,2,3,4,5};
LinkList <int> b(r,5);
b.PrintList(); //输出单链表所有元素
b.del_x_y(2,4);
b.PrintList();
}
请问,上述程序错在哪里?老是调不好.....谢谢了!