C语言单链表创建的时候,我写的是输入-1时跳出循环,但是-1最终也被存到了单链表里

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