C++实现单链表,如何创建一个滑动的指针?

我们老师要求我们做 插入当前结点 的函数。我不太理解这个当前结点的意思。
我的想法是:先让用户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);

图片说明

return 0;
}

1个回答

你的代码有点长啊大兄弟
我们老师要求我们做 插入当前结点 的函数。我不太理解这个当前结点的意思。

根据你的意思我回答一下
当前节点的是指
设置了一个滑动的节点,一般名字是
currentNode用于遍历节点。
因为你是要做链表,那么用链表的头节点来移动遍历整个链表,就会遇到一个问题,怎么恢复原来的位置呢?
要是你做的是一个一个双向链表也是可以的,但是要是用一个滑动节点等于头节点,然后顺着头节点进行遍历,那么不就好了么?
所谓的当前节点,就是指的是那个滑动节点指向的位置。
滑动节点也是个位置。

欢迎关注我的CSDN账号
和我的微信公众号: 肥宅Sean笔记
我平时会写一些笔记在上面,可以相互映照着看

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问