#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LinkNode
{
ElemType data;
struct LinkNode *next;
}LinkNode,*LinkList;
Status CreatLinkList(LinkList *L )
{
LinkList r,p,ptr;
(*L)=(LinkNode*)malloc(sizeof(LinkNode));
r=*L;
ptr=*L;
while(1)
{
p=(LinkNode*)malloc(sizeof(LinkNode));
scanf("%d",&p->data);
// p->data=*Node_Value;
r->next=p;
r=p;
if(r->data==0)
{
break;
}
}
r->next=NULL;
return OK;
}
Status DeleteLastNode(LinkList *L)
{
LinkList ptr,ptr1;
ptr=*L;
while(ptr->next!=NULL)
{
ptr1=ptr;
ptr=ptr->next;
} // printf("%d",ptr->data);while(1);
ptr1->next=NULL;
free(ptr);
return OK;
}
Status LinkListInsert(LinkList *L,int &Insert_Pos,ElemType &Insert_Value)
{
LinkList k,s;
k=*L;
int j=1; // printf("%d",k->next->data);
if(!k)
{
return ERROR;
}
while(k&&j<Insert_Pos)
{
k=k->next;
j++;
}
s =(LinkList)malloc(sizeof(LinkNode));
s->data=Insert_Value;
s->next=k->next;
k->next=s;
return OK;
}
Status LinkListDelete(LinkList *L,int num)
{
LinkList z,p;
p=*L;
int j=1;
/*for(int i=0;i<num-1;i++)
{
z=z->next;
}*/
while(j<num)
{
p=p->next;
j++;
}
z=p->next; printf("%d",z->data);while (1);
{
}
p->next=z->next;
free(z);
return OK;
}
Status GetNodeLength(LinkList *L)
{
LinkList p;
int NodeNum=0;
p=*L;
while (p->next!=NULL)
{
p=p->next;
NodeNum++;
}
return NodeNum;
}
void ShowLinkList(LinkList L)
{
printf("*************链表中的元素************\n");
LinkNode *node=L->next;// printf("%d ",L->next->data);
while(node)
{
printf("%d ",node->data);
node=node->next;
}
printf("\n");
}
Status GetNodeLocation(LinkList *L, int e,int GetNodeLength)
{
LinkList p;
p=*L;
int j=1;
while(j<GetNodeLength)
{
p=p->next;
if(p->data==e)
{
break;
}
j++;
}
return j;
}
int main()
{
int LinkNode_num,Opt_num,Node_Value,Insert_Value,Insert_Pos;
printf("1.初始化链表\n");
printf("2.插入节点\n");
printf("3.删除节点\n");
printf("4.返回节点所在位置\n");
printf("5.遍历链表\n");
printf("0.退出\n\n");
printf("请选择你的操作:");
LinkList L;
int k,j,i,m;
int flag=0;
while(1)
{
scanf("%d",&Opt_num);
switch (Opt_num)
{
case 1:
printf("请输入节点的值,输入0完成初始化\n");
//scanf("%d",&Node_Value);
CreatLinkList(&L);
DeleteLastNode(&L);
k=GetNodeLength(&L); //printf("%d",k);while (1);
//LinkListDelete(&L,k);
ShowLinkList(L);
break;
case 2:
printf("请选择插入的位置:");
scanf("%d",&Insert_Pos);
printf("输入要插入节点的值:");
scanf("%d",&Insert_Value);
LinkListInsert(&L,Insert_Pos,Insert_Value);
ShowLinkList(L);
break;
case 3:
printf("输入删除节点的位置:\n");
scanf("%d",&j);
LinkListDelete(&L,j);
printf("删除%d节点后",j);
ShowLinkList(L);
break;
case 4:
printf("你要查找第几个节点的值所在位置:");
scanf("%d",&i);
k=GetNodeLength(&L);
m=GetNodeLocation(&L,i,k);
printf("节点所在的位置:%d\n",m);
break;
case 5:
ShowLinkList(L);
break;
case 0:
flag++;
break;
default:
break;
}
if (flag==1)
{
break;
}
}
}