数据结构 单向链表 C++ 非Class实现
昨天上了数据结构的课程,虽然说上个学期也上了链表(但我没认真听),而且我觉得用Class实现简单链表太麻烦了,所以直接用struct实现了一下
上代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,x;
struct Link{
int data;
Link *nxt;
};
Link *head;
void preadd(){
Link *newNode= new Link;
newNode->data=x;
newNode->nxt=head;
head=newNode;
}
void backadd(){
Link *newNode = new Link;
newNode->data=x;
newNode->nxt=NULL;
Link *pp=head;
if(head==NULL)
head=newNode;
else{
while(pp->nxt!=NULL)
pp=pp->nxt;
pp->nxt=newNode;
}
}
void interadd(int pos){
Link *newNode = new Link;
newNode->data=x;
Link *pp= head;
while(pos--){
pp=pp->nxt;
}
newNode->nxt=pp->nxt;
pp->nxt=newNode;
}
void del(int pos){
pos-=2;//这里需要-2,因为从头开始,我们只需跳四步即可到达pos位置,但我们需要删掉pos位置,所以需要再退一步
Link *newNode = new Link;
newNode->data=x;
Link *pp= head;
while(pos--){
pp=pp->nxt;
}
pp->nxt=pp->nxt->nxt;
}
void init(){
head = NULL;
}
void print(){
while(head!=NULL){
printf("%d ",head->data);
head=head->nxt;
}
}
int main(){
init();
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&x);
backadd();
}
while(m--){
int p,pos;
scanf("%d",&p);
if(p==1){
scanf("%d",&x);
backadd();//在尾部加
++n;
}
else if(p==2){
scanf("%d",&x);
preadd();//在前面加
++n;
}
else if(p==3){
scanf("%d %d",&pos,&x);
interadd(pos);//在位置pos后插入
++n;
}
else {
scanf("%d",&pos);
del(pos);//删除pos位置的元素
--n;
}
}
print();
return 0;
}
转载:https://blog.csdn.net/qq_33437973/article/details/101035084
查看评论