标题:新手,请大佬看看这个生成单链表,为什么输出后还有一串数???
只看楼主
z1145674456
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-12-27
结帖率:0
已结贴  问题点数:20 回复次数:3 
新手,请大佬看看这个生成单链表,为什么输出后还有一串数???
这个单链表输出,都会带一段数字,前面的数符合条件了,可是后面还有一段数,不明白怎么出现的,链表为我也赋值空指针了,测试输出循环体也是循环了符合条件的次数,请大佬教教新手。
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
    int key;
    struct node *next;
}nodetype;
nodetype* inicial(nodetype* base);
void print(nodetype* base);
int main(){
    nodetype *base=NULL;
    int n;
    base=inicial(base);
    print(base);
    return 0;
}

nodetype* inicial(nodetype* base){
    nodetype *q=NULL,*p=NULL;
    int x;
    q=(nodetype*)malloc(sizeof(nodetype));
    base=q;
    p=base;
    scanf("%d",&x);
    do{
        p->key=x;
        q=(nodetype*)malloc(sizeof(nodetype));
        p->next=q;
        p=p->next;
        p->next=NULL;
        scanf("%d",&x);
    }while(x!=0);
    p->next=NULL;
    return base;
}
void print(nodetype* base){
    nodetype *tmp=base;
    while(tmp!=NULL){
        printf("%d",tmp->key);
        tmp=tmp->next;
    }
}


输入 5 4 2 1 3 0           应该输出 54213
可是却输出543211726400
另一道删除节点的题,也是相同的差不多的给链表赋值,和输出也是这样的问题。
搜索更多相关主题的帖子: base 输出 next 单链表 NULL 
2020-12-27 20:33
z1145674456
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-12-27
得分:0 
回复 楼主 z1145674456
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
    int key;
    struct node *next;
}nodetype;
nodetype* inicial(nodetype* base);
void print(nodetype* base);
int main(){
    nodetype *base=NULL;
    int n;
    base=inicial(base);
    print(base);
    return 0;
}

nodetype* inicial(nodetype* base){  //赋值链表
    nodetype *q=NULL,*p=NULL;
    int x;
    q=(nodetype*)malloc(sizeof(nodetype));
    base=q;
    p=base;
    scanf("%d",&x);
    do{
        p->key=x;
        q=(nodetype*)malloc(sizeof(nodetype));
        p->next=q;
        p=p->next;
        p->next=NULL;
        scanf("%d",&x);
    }while(x!=0);
    p->next=NULL;
    return base;
}
void print(nodetype* base){  //输出
    nodetype *tmp=base;
    while(tmp!=NULL){
        printf("%d",tmp->key);
        tmp=tmp->next;
    }
}
2020-12-27 20:35
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
你的问题出在输出这条语句上了,while (tmp->next != NULL)

我这里把inicial稍微修改了一下

程序代码:
nodetype *inicial()
{
    nodetype *base, *p;
    int x;
    base = (nodetype *)malloc(sizeof(nodetype));
    p = base;

    while(1)
    {
        scanf("%d", &x);
        if(x == 0)
            break;

        p->key = x;
        p->next = (nodetype *)malloc(sizeof(nodetype));
        p = p->next;        
    }

    p->next = NULL;
    return base;
}

void print(nodetype *base) //输出
{
    nodetype *tmp = base;

    while(tmp->next != NULL)
    {
        printf("%d", tmp->key);
        tmp = tmp->next;
    }
}


[此贴子已经被作者于2020-12-28 00:50编辑过]

2020-12-28 00:41
z1145674456
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-12-27
得分:0 
回复 3楼 apull
十分感谢,改成这样确实符合条件了,AC了,再仔细检查了原来最后一节节点申请了,但没赋值。输出一起输出了。
2020-12-28 21:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504411-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.392531 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved