###### SroUngE

2017-10-20 08:32 阅读 922

# C++实现单链表，如何创建一个滑动的指针？

#include
using namespace std;
struct Node{
int data;
Node *next;
};
class List{
Node *p;//滑动指针
public:
List(){ //构造函数
}
~List(){ //析构函数
delete p;
}
}
void CreatList(int n);
void InsertCurrent(int item);
void InsertTail(int item);
void DeleteCurrent();
void DeleteTail();
int FindCurrent();
int FindK(int k);
int Search(int item);
void Outputlist();
};
void List::CreatList(int n){ //创建长度为n的链表
Node *p,*s;
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;
}
{
Node *s;
s=new Node;
s->data=item;
s->next=p->next;
p->next=s;
return;
}
void List::InsertTail(int item)//插入在表尾后
{
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;
}
{
delete p;
}
void List::DeleteTail()//删除表尾
{
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{
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)//查找结点
{
int i=0;
while(p!=NULL&&item==p->data){
p=p->next;
i++;
}
if(p!=NULL){return i;}
else{return -1;}
}
void List::Outputlist()//输出函数
{
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;
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();

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笔记
我平时会写一些笔记在上面，可以相互映照着看

点赞 评论 复制链接分享