#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Lnode{
int data; //数据域
struct Lnode *next; //指针域
}Lnode,*Linklist; //*Linklist为Lnode类型的指针
int CreateList(Linklist L,int n) //头插法
{
Linklist p,q;
p = L;//第一步,取到头结点,两个指针指向同一内存,改变p指向的内存,L指向的内存不变,L仍为头结点
printf("请输入%d个数:\n", n);
for (int i = 1; i <= n; i++)
{
q = (Linklist)malloc(sizeof(int));
if (!p)
{
printf("p的初始化出现问题!\n");
return 0;
}
scanf("%d", &q->data);
q->next = p->next;//第二步链接两个结点
p->next = q;//第二步链接两个结点
p = q;//关键的一步,更换位置,进行下次循环
}
return 1;
}
int ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
{
int j;
Lnode *p;
p=L;
j=0;
while(p->next&&j<i-1)//遍历并且进行第i-1个位置的查找
{
p=p->next;
++j;
}
if(!p||j>i-1)//如果找不到的话就返回error
{
return ERROR;
}
Lnode *S=(Linklist)malloc(sizeof(Lnode));
S->data=e;
S->next=p->next;
p->next=S;
}
int ListDelete(Linklist *L,int i,int *e)//单链表的删除
{
int j;
Lnode *p,*q;
p=L;
j=0;
while(p->next&&j<=i-1)//寻找第i-1个元素
{
p=p->next;
++j;
}
if(!p||j>i-1)//删除位置不合理,找不到元素
{
return ERROR;
}
q=p->next;//删除并释放结点
p->next=q->next;
free(q);
}
Lnode *Locate(Linklist L,int i){ //按序号查找 定位
int j=1;
Lnode *p;
if(i==0)
{
return L;
}
p=L->next;
while((p!=NULL)&&(j<i)) // 判断是否在范围之内 因为从0开始所以小于i就行
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;//查找范围超过表长
}
int getLinklist(Linklist L){
if(!L->next)
{
printf("链表没有节点,不能输出");
return 0;
}
Linklist p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}
int main()
{
int a;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));
printf("请问您想输入几个数:");
scanf("%d",&a);
CreateList(L,a);
int i,select;
int *e;
printf("请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2,按序号查找请输入3,\n");
scanf("%d",&select);
if(select==1)
{
printf("请输入想插入的位置和想插入的数");
scanf("%d %d",&i,&e);
ListInsert(L,i,e);
getLinklist(L);
}
if(select==2)
{
printf("请输入想删除的位置");
scanf("%d %d",&i,&e);
ListDelete(L,i,e);
getLinklist(L);
}
if(select==3)
{
scanf("%d",&i);
Lnode *Locate(L,i);
getLinklist(L);
}
return 0;
}
为什么我的代码跑出来是无限循环一些别的数