#include<stdio.h>
#include<malloc.h>
typedef struct Link{
int data;
struct Link *next;
int indext;
}LNode,*Linklist;
Linklist create();//创建链表
int input(Linklist L);//插入一个结点(尾插法)
int input_1(Linklist L);//插入多个结点(尾插法)
int input_head(Linklist L); //插入多个结点(头插法)
void print(Linklist L);//输出结点
void delet_Link(Linklist L);//删除结点(按元素值)
void reverse(Linklist L);//逆置链表
main()
{
Linklist L;
L=create();
printf("插入新节点\n");
if(!input_1(L))
printf("插入新结点失败\n");
else printf("插入新节点成功\n");
// if(!input_head(L))
// printf("插入新结点失败\n");
// else printf("插入新节点成功\n");
print(L); //输出结点 input_head(Linklist L)
int i;
delet_Link(L);
// print(L);
reverse(L);
print(L);
}
Linklist create()
{
Linklist phead;
phead=(Linklist)malloc(sizeof(LNode));
phead->next=NULL;
phead->indext=0;
return phead;
}
int input_1(Linklist L) //输入多个结点
{
Linklist pnew,ptemp;
do
{
pnew=(Linklist)malloc(sizeof(LNode));
scanf("%d",&pnew->data);
pnew->next=NULL;
L->next=pnew;
L=pnew;
L->indext++;
}while(pnew->data!=0);
pnew->next=NULL;
}
int input(Linklist L) //插入一个结点
{
Linklist pnew,ptemp;
pnew=(Linklist)malloc(sizeof(LNode));
if(!pnew)
return 0;
printf("输入信息");
scanf("%d",&pnew->data);
pnew->next=NULL;
L->next=pnew;
return 1;
}
void print(Linklist L)
{
Linklist ptemp=L->next;
while(ptemp)//!=NULL
{
printf("%d,",ptemp->data);
ptemp=ptemp->next;
}
}
int input_head(Linklist L)//头插法
{
Linklist pnew,ptemp;
printf("头插法\n");
int data;
scanf("%d",&data);
while(data!=0)
{
pnew=(Linklist)malloc(sizeof(LNode));
pnew->data=data;
pnew->next=L->next;
L->next=pnew;
scanf("%d",&data);
}
return 1;
}
void delet_Link(Linklist L)
{
Linklist ptemp=L;
printf("\n输入你要删除的元素\t");
int x,i;
scanf("%d",&x);
if(L->next==NULL) printf("空");
while(L->data!=x && L)
{
ptemp=L;
L=L->next;
i++;
}
// if(i==L->indext) printf("不存在\n");
// else
{
ptemp->next=L->next;
free(L);
L->indext--;
}
}
void reverse(Linklist L)
{
Linklist ptemp,pnew;
ptemp=L->next;
L->next=NULL;
while(ptemp)
{
pnew=ptemp;
ptemp=ptemp->next;
pnew->next=L->next;
L->next=pnew;
}
}