#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 20
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//头插法
LinkList HeadInsert(LinkList &l){
l=(LinkList)malloc(sizeof(LNode));
l->next=NULL;
int k;
scanf("%d",&k);
LNode *s;
while(k!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=k;
s->next=l->next;
l->next=s;
printf("请输入你的数字\n");
scanf("%d",&k);
}
return l;
}
//尾插法
LinkList TailInsert(LinkList &l){
l=(LinkList)malloc(sizeof(LNode));
LNode *cur=l;
int k;
scanf("%d",&k);
LNode *s;
while(k!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=k;
cur->next=s;
cur=s;
printf("请输入你的数字\n");
scanf("%d",&k);
}
cur->next=NULL;
return l;
}
//删除
LinkList HeadRemove(LinkList &l,int i){
LNode *p=l->next;
LNode *pre=l;
LNode *q;
while(p!=NULL){
if(p->data==i){
q=p->next;
pre->next=q->next;
free(q);
}else{
p=p->next;
pre=pre->next;
}
}
}
//遍历
void bianli(LinkList &l){
LNode *p=l->next;
//printf("%d\n",p->data);
while(p!=NULL){
printf("%d\n",p->data);
p=p->next;
}
}
//按值查找
LNode *GetElemzhi(LinkList l,int i){
LNode *p=l->next;
while(p!=NULL&&p->data!=i){
p=p->next;
}
return p;
}
//按顺序查找
LNode *GetElemxu(LinkList l,int i){
LNode *p=l->next;
int j=1;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
//插入
LinkList HeadInsert(LinkList &l,int i,int j){
//i是第几个位置,j是插入的数值
LNode *prenode=GetElemxu(l,i-1);
LNode *node=(LNode*)malloc(sizeof(LNode));
node->data=j;
node->next=prenode->next;
prenode->next=node;
return l;
}
//删除
LinkList Headdelete(LinkList &l,int i){
//i是第几个位置
LNode *prenode=GetElemxu(l,i-1);
LNode *node=prenode->next;
prenode->next=prenode->next->next;
free(node);
return l;
}
//计算长度
int length(LinkList l){
LNode *p=l->next;
int i=0;
while(p!=NULL){
p=p->next;
i++;
}
return i;
}
//逆置
LinkList reverse(LinkList &l){
LNode *p1=l->next;
LNode *p2;
l->next=NULL;
while(p1!=NULL){
p2=p1;
p1=p1->next;
p2->next=l->next;
l->next=p2;
//p1=p1->next;
}
return l;
}
int main(){
LinkList l;
//l=HeadInsert(l);
//bianli(l);
l=TailInsert(l);
bianli(l);
LNode *node1=GetElemzhi(l,23);
printf("%d\n",node1->data);
LNode *node2=GetElemxu(l,3);
printf("%d\n",node2->data);
//HeadRemove(l,34);
printf("%d\n");
HeadInsert(l,4,199);
bianli(l);
printf("%d\n");
Headdelete(l,3);
bianli(l);
int result=length(l);
printf("%d",result);
printf("\n");
printf("\n");
reverse(l);
bianli(l);
return 1;
}