SroUngE 2017-10-20 08:32 采纳率: 0%
浏览 946

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条回答

  • 肥宅_Sean 2017-10-22 09:03
    关注

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料