鱼C论坛

 找回密码
 立即注册
查看: 987|回复: 2

[已解决]单链表3的一些问题

[复制链接]
发表于 2020-3-18 19:43:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
struct nmb
{
        int n;
        struct nmb *next;
};
void inmub(struct nmb **p,int n)
{
        struct nmb *temp=(struct nmb *)malloc(sizeof(struct nmb));
        temp->n=n;
        struct nmb *swap,*p1=NULL;
        swap=*p;
        if(*p==NULL)
        {
                *p=temp;
                temp->next=NULL;
       
        }
        else
        {
        if(n<=swap->n)
                {
                        *p=temp;
                        temp->next=swap;
                }
                else
                {
                        while(swap!=NULL&&n>swap->n)
                        //        while(n>swap->n&&swap!=NULL)   此处条件互换程序会出问题
                        {
                                p1=swap;
                                swap=swap->next;
                        }
                        if(swap==NULL)
                        {
                                p1->next=temp;
                                temp->next=NULL;
                        }
                        else
                        {
                                p1->next=temp;
                                temp->next=swap;
                        }
                       
                }
        }
}

int main()
{
        struct nmb *nmb=NULL,*temp;
        int n;

        while(1)
        {
                printf("请输入数字:");
                scanf("%d",&n);
                if(n==-1)
                {
                        break;
                }
               
                inmub(&nmb,n);
                temp=nmb;
                while(nmb!=NULL)
        {
                printf("%d  ",nmb->n);
                nmb=nmb->next;
        }
        nmb=temp;
        printf("\n");               
        }

/*        if(nmb==NULL)
        {
                printf("ddd");
        }*/
        return 0;
}
//为什么我注释的那个地方,条件互换之后程序就会出现问题了啊
最佳答案
2020-3-19 08:33:49
我懂你的意思了。当你把while(swap!=NULL&&n>swap->n)这一句话放在前面时,程序一切正常。
当你把 while(n>swap->n&&swap!=NULL) 这一句话放在前面时先输入一个数,正常在输入一个比你第一次输入的那个数大的时候,程序就会出现问题。
你认为&&两边一样,对吗?
当你把 while(n>swap->n&&swap!=NULL)放在前面时,咱们假设以前只输入了一个5,现在又输入了一个8,因为8>5,所以执行while语句之内语句。swap=swap->next;此时swap=NULL,此时已经指向NULL。但是执行while语句时你还要执行n>swap->n,当然会出现错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 20:32:04 | 显示全部楼层
没看懂你代码是想表过什么?
问问题把问题描述清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 08:33:49 | 显示全部楼层    本楼为最佳答案   
我懂你的意思了。当你把while(swap!=NULL&&n>swap->n)这一句话放在前面时,程序一切正常。
当你把 while(n>swap->n&&swap!=NULL) 这一句话放在前面时先输入一个数,正常在输入一个比你第一次输入的那个数大的时候,程序就会出现问题。
你认为&&两边一样,对吗?
当你把 while(n>swap->n&&swap!=NULL)放在前面时,咱们假设以前只输入了一个5,现在又输入了一个8,因为8>5,所以执行while语句之内语句。swap=swap->next;此时swap=NULL,此时已经指向NULL。但是执行while语句时你还要执行n>swap->n,当然会出现错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表