#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct Lnode
{
int data;
Lnode *next;
} Lnode,*linklist;
void creat_h(linklist &L) //头插法
{
linklist s;
int n,tmp;
L=(linklist)malloc(sizeof(Lnode));
L->next=NULL;
scanf("%d",&n);
for (int i=1; i<=n; i++)
{
scanf("%d",&tmp);
s=(linklist)malloc(sizeof(Lnode));//新建立一个节点
s->data=tmp;
s->next=L->next;//相当于把新的节点的下一个节点指向前面一个节点的地址
L->next=s;//再把这个节点更新
}
}
void creat_w(linklist &L) //尾插法
{
linklist p,q;
int n,tmp;
L=(linklist)malloc(sizeof(Lnode));
L->next=NULL;
p=L;
scanf("%d",&n);
for (int i=1; i<=n; i++)
{
scanf("%d",&tmp);
q=(linklist)malloc(sizeof(Lnode));
q->data=tmp;
q->next=NULL;
p->next=q;//把p指向下一个节点
p=q;//更新这个节点
}
p->next=NULL;
}
void print(linklist head)
{
linklist p=head->next;//由于第一个节点为空,需要把第一个节点排除
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void delete_list(linklist head,int w)
{
linklist p=head,q;//删除的话要从空节点开始连接这样不会漏掉第一个节点
while(p!=NULL){
q=p->next;
if(q!=NULL && q->data==w){
p->next=q->next;
free(q);//释放空间
}else
p=p->next;
}
}
void insert_list(linklist head,int pos,int w){
int s=0;//插入到pos位置计数位置需要从0开始,因为插入删除要从前面一个节点,第一个节点的前一个节点是第一个头节点
linklist p=head,q,tmp;
while(p!=NULL)
{
s++;
if (s==pos){
tmp=p->next;
q=(linklist)malloc(sizeof(Lnode));
q->data=w;
p->next=q;
p=q;
q->next=tmp;
}else
p=p->next;
}
}
int main()
{
int n;
linklist a;
creat_w(a);print(a);
delete_list(a,1);//删除值为1的节点
print(a);
insert_list(a,1,1000);//插入在1位置,节点值为1000的节点
print(a);
return 0;
}