C语言单链表创建的时候,我写的是输入-1时跳出循环,但是-1最终也被存到了单链表里
问题描述:
C单链表创建的时候,我写的是输入-1时跳出循环,但是-1最终也被存到了单链表里,而且遇到-1之后还要再输入一个数才结束
#include <stdio.h>
#include <stdlib.h>
#define Length sizeof(struct Integer)//struct Integer类型数据的长度
struct Integer
{
int num;
struct Integer *next;
};
struct Integer *Creat(void)//创建
{
struct Integer *head,*p1,*p2;
head =(struct Integer*)malloc(Length);
p1=p2=head;
int num;
while(1)
{
scanf("%d",&num);
if(p1->num==-1) break;
p1 =(struct Integer*)malloc(Length);
p1->num=num;
p2->next=p1;
p2=p1;
}
p1->next=NULL;
return (head);
}
void Insert(Integer *head,int num,int n)//插入
{
Integer *p1,*p2;
p1=(struct Integer*)malloc(Length);
p1->num=num;
p2=head;
int i=1;
while(n>i)
{
p2=p2->next;
i++;
}
p1->next=p2->next;
p2->next=p1;
}
int Delete(Integer *head,int num)//删除
{
Integer *p1,*p2;
if(head->next=NULL)
{
return 0;
}
p2=head;
p1=p2->next;
while(p1!=NULL&&num!=p1->num)
{
p2=p1;
p1=p2->next;
}
if(p1!=NULL)
{
p2->next=p1->next;
return 1;
}
else
{
return 0;
}
}
void Travel(Integer *head)//遍历
{
struct Integer *p;
p=head->next;//第一个节点
while(p!=NULL)
{
printf("%d\n",p->num);
p=p->next;
}
}
void Search(Integer *head,int n)//查询
{
Integer *p;
p=head->next;
for(int i=1;i<=n+1;i++)
{
p=p->next;
}
printf("%d\n",p->num);
}
int main()
{
struct Integer *Head;
int ch;
printf("1.创建\n2.插入节点\n3.删除节点\n4.遍历\n5.查询\n");
while(1)
{
printf("请输入要进行的操作\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
Head=Creat();
break;
case 2:
int num,n;
printf("请输入要插入的数据\n");
scanf("%d",&num);
printf("请输入要插入的位置\n");
scanf("%d",&n);
Insert(Head,num,n);
break;
case 3:
int num1;
printf("请输入要插入的数据\n");
scanf("%d",&num1);
Delete(Head,num1);
break;
case 4:
Travel(Head);
break;
case 5:
int m;
printf("请输入要插入的位置\n");
scanf("%d",&m);
Search(Head,m);
break;
default:
break;
}
}
return 0;
}
答
第18行修改为:
if(num ==-1) break;//if(p1->num==-1) break;
答
改为定义一个局部变量temp,如果是-1退出,否则将temp的值赋给num