我们老师要求我们做 插入当前结点 的函数。我不太理解这个当前结点的意思。
我的想法是:先让用户search,返回一个指针p,指向某个结点a。然后insertcurrent,就是在a结点后插入新结点。
问题:我怎么把这个指针p传入insertcurrent??
我在list类里面定义了一个Node*p,执行起来程序会奔溃,如图。
#include
using namespace std;
struct Node{
int data;
Node *next;
};
class List{
Node *head;//头结点
Node *p;//滑动指针
public:
List(){ //构造函数
head=new Node;
head->next=NULL;
}
~List(){ //析构函数
while(head){ //循环删除
p=head;
head=head->next;
delete p;
}
head=NULL;
}
void CreatList(int n);
void InsertCurrent(int item);
void InsertHead(int item);
void InsertTail(int item);
void DeleteCurrent();
void DeleteHead();
void DeleteTail();
int FindCurrent();
int FindK(int k);
int Search(int item);
void Outputlist();
};
void List::CreatList(int n){ //创建长度为n的链表
Node *p,*s;
p=head;
cout<<"请依次输入"<
for(int i=0;i
s=new Node;
cin>>s->data;
s->next=p->next;
p->next=s;
p=s;
}
};
void List::InsertCurrent(int item)//插入在当前结点后
{
Node *s;//s指向要插入的结点
s=new Node;//动态分配一个新结点
s->data=item;//设item为此结点
s->next=p->next;//s的next指针指向p的后继结点
p->next=s;//p的next指针指向s
return;
}
void List::InsertHead(int item)//插入在表头后
{
p=head;
Node *s;
s=new Node;
s->data=item;
s->next=p->next;
p->next=s;
return;
}
void List::InsertTail(int item)//插入在表尾后
{
p=head;
int i=0;
while (p->next!=NULL) {
p=p->next;
i++;
}
Node *s;
s=new Node;
s->data=item;
s->next=NULL;
p->next=s;
return;
}
void List::DeleteCurrent()//删除当前结点的后继结点
{
Node *q;
if(p==NULL){return;}
q=p->next;
p->next=q->next;
delete p;
}
void List::DeleteHead()//删除表头
{
p=head;
head=p->next;
delete p;
}
void List::DeleteTail()//删除表尾
{
p=head;
int i=0;
while (p->next!=NULL){
p=p->next;
i++;
}
while (p->next!=NULL){
p=p->next;
i++;
}
p->next=NULL;
}
int List::FindCurrent()//存取当前结点的值
{
int item;
item=p->data;//
return item;
}
int List::FindK(int k)//存取第K个结点的值
{
int item;
if(k
else{
p=head;
int i=0;
while(p!=NULL&&i
p=p->next;
i++;
}
if(p==NULL){return -1;}
item=p->data;
return item;
}
}
int List::Search(int item)//查找结点
{
p=head;
int i=0;
while(p!=NULL&&item==p->data){
p=p->next;
i++;
}
if(p!=NULL){return i;}
else{return -1;}
}
void List::Outputlist()//输出函数
{
p = head;
while (p != NULL)
{
cout << p->data<<"->";
p = p->next;
}
cout << endl;
return;
}
int main()
{
int n,q, w, e,r,g = 0;
List a;
cout<<"输入链表长度"<<endl;
cin>>n;
a.CreatList(n);
cout << "创建成功,链表为:";
a.Outputlist();
cout << "请输入插入表头的数:";
cin >> q;
a.InsertHead(q);
cout << "插入表头后链表为:";
a.Outputlist();
cout << "请输入插入表尾的数:";
cin >> w;
a.InsertTail(w);
cout << "插入表尾后链表为:";
a.Outputlist();
cout << "请输入插入当前的数:" ;
cin >> e;
a.InsertCurrent(e);
cout << "插入表中后链表为:";
a.Outputlist();
a.DeleteTail();
cout << "删除尾节点后链表为:";
a.Outputlist();
a.DeleteHead();
cout << "删除头节点后链表为:";
a.Outputlist();
a.DeleteCurrent();
cout << "删除头节点后链表为:";
a.Outputlist();
a.FindCurrent();
cout << "请输入想查找的第几个数:";
cin >> r;
cout << "查找的第" << r << "个的值为" << a.FindK(r);
a.Search(g);