在写循环链表的插入时 一直无法实现循环 链表都构建不了
帮帮孩子吧孩子真不行了
这个程序不知道为什么就是构建不了
运行时插入一个元素后便进行不下去
什么也不显示 之后便退出了
程序如下:
#include<stdio.h>
#include<stdlib.h>
struct line
{
int liner;
struct line *next;
};
void getinput(struct line *newletter)//向新节点中输入元素
{
printf("请输入元素:");
scanf("%d",(*newletter).liner);
}
void printletter(struct line *letter)
{
struct line *newletter;
newletter=letter;
while(newletter->next!=letter)
{
printf("%d\n",newletter->liner);
newletter=newletter ->next;
}
}
void freeletter(struct line **letter)//释放空间
{
struct line *temp;
while(letter!=NULL)
{
temp =*letter;
*letter= (*letter)->next;
free(temp);
}
}
void addline(struct line **letter)//插入新节点
{
int i;
struct line *newletter,*temp;
printf("输入你想输入的值,当输入0时结束输入\n");
while(1)//小甲鱼在带你学c带你飞中讲的循环
{
scanf("%d",&i);
if(i==0)break;
if((*letter)=NULL)
{
(*letter)=(struct line *)malloc(sizeof(struct line));
if(!(*letter))
exit(0);
(*letter)->liner=i;
(*letter)->next=*letter;
}
else
{
for(temp=(*letter);temp->next !=(*letter);temp=temp->next)
;
newletter=(struct line *)malloc(sizeof(struct line));
if(!newletter)
exit(0);
newletter->liner=i;
newletter->next=(*letter);
temp->next=newletter;
}
}
}
void insert(struct line **letter,int i)//插入函数
{
struct line *temp,*last,*target,*p;
int item,j=1;
printf("请输入你想插入的值:");
scanf("%d",&item);
if(i==1)
{
temp=(struct line *)malloc(sizeof(struct line));
temp->liner = item;
for(last=(*letter);last->next!=(*letter);last=last->next);
last->next=temp;
temp->next=(*letter);
}
else
{
target = (*letter);
for(;j<i-1;++j)
{
target->next;
}
temp=(struct line *)malloc(sizeof(struct line));
temp->liner = item;
p=target->next;
target->next=temp;
temp->next=p;
}
}
int find(struct line *letter,int elem)//寻找到想插入位置的函数
{
struct line *target;
int i=1;
for(target=letter;target->liner!=elem&&target->next!=letter;++i)
{
target = target->next;
}
if(target->next==letter)
{return 0;}
return i;
}
int main()
{
struct line *letter ;
int ch,h,t;
printf("请输入你想插入的链表数值\n");
addline(&letter);
printf("是否打印Y/N :");
do
{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y')
{
printletter(letter);
}
printf("你想插入到那个元素之后:");
scanf("%d",&t);
h=find(letter,t);
insert(&letter,h);
printf("是否打印Y/N :");
do
{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y')
{
printletter(letter);
}
freeletter(&letter);
return 0;
} #include<stdio.h>
#include<stdlib.h>
struct line
{
int liner;
struct line *next;
};
void getinput(struct line *newletter)//向新节点中输入元素
{
printf("请输入元素:");
scanf("%d",(*newletter).liner);
}
void printletter(struct line *letter)
{
struct line *newletter;
newletter=letter;
while(newletter->next!=letter)
{
printf("%d\n",newletter->liner);
newletter=newletter ->next;
}
printf("%d\n",newletter->liner);
}
void addline(struct line **letter)//插入新节点
{
int i;
struct line *newletter,*temp;
printf("输入你想输入的值,当输入0时结束输入\n");
while(1)//小甲鱼在带你学c带你飞中讲的循环
{
scanf("%d",&i);
if(i==0)break;
if((*letter)==NULL) // ==
{
(*letter)=(struct line *)malloc(sizeof(struct line));
if(!(*letter))
exit(0);
(*letter)->liner=i;
(*letter)->next=*letter;
}
else
{
for(temp=(*letter);temp->next !=(*letter); temp=temp->next);
newletter=(struct line *)malloc(sizeof(struct line));
if(!newletter)
exit(0);
newletter->liner=i;
newletter->next=(*letter);
temp->next=newletter;
}
}
}
int main()
{
struct line *letter=NULL ;
int ch,h,t;
printf("请输入你想插入的链表数值\n");
addline(&letter);
printf("是否打印Y/N :");
do
{
ch=getchar();
}while(ch!='Y'&&ch!='N');
if(ch=='Y')
{
printletter(letter);
}
return 0;
}
本帖最后由 高光远 于 2020-3-18 21:05 编辑
ba21 发表于 2020-3-18 00:19
那里少了一个=所以无法进行判定
页:
[1]