标题:求助有关链表的问题 输出的时候多了一个零
只看楼主
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
结帖率:50%
 问题点数:0 回复次数:9 
求助有关链表的问题 输出的时候多了一个零
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef struct Node
{
    int data;
    struct Node* next;
}SLIST;

SLIST* List_Create();
int List_Print(SLIST* pHead);

SLIST* List_Create()
{
    int num = 0;
    SLIST* pHead = NULL;
    SLIST* pCur = NULL;
    while (num != -1)
    {
        SLIST* pM = (SLIST*)malloc(sizeof(SLIST));
        pM->data = num;
        pM->next = NULL;
        if (pHead == NULL)
        {
            pHead = pCur = pM;
        }
        else
        {
            pCur->next = pM;
            pCur = pM;
        }
        printf("请输入num的值:");
        scanf("%d", &num);
    }
    printf("num的值为-1,存值结束");
    return pHead;
}

void main()
{
    SLIST* pHead = NULL;
    pHead = List_Create();

    List_Print(pHead);
    system("pause");
}

int List_Print(SLIST* pHead)
{
    SLIST* p = NULL;
    for (p = pHead; p; p = p->next)
    {
        printf("%d ", p->data);
    }
    printf("\n");
}
搜索更多相关主题的帖子: next NULL int num printf 
2020-03-19 18:33
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
得分:0 
感觉是前面的num=0  导致第一个结点的数据域是0
应该怎么改进呢?
2020-03-19 18:34
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
有些数据结构的书喜欢用头结点,有些喜欢用头指针,你很不小心地混淆了二者。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-19 19:07
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
把输入num值拎到malloc上方不就行了?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-19 19:09
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
另外前辈告诫过我,没有free的malloc是没有灵魂的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-19 19:11
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
得分:0 
回复 5楼 forever74
太感谢大哥了 忘记malloc了
2020-03-20 13:27
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
得分:0 
回复 4楼 forever74
大哥 我把输入num放前面 结果我输入-1的时候,-1被当成结点的元素保存了

SLIST* List_Create()
{
    int num = 0;
    SLIST* pHead = NULL;
    SLIST* pCur = NULL;
    while (num != -1)
    {
        printf("请输入num的值:");
        scanf("%d", &num);
        SLIST* pM = (SLIST*)malloc(sizeof(SLIST));
        pM->data = num;
        pM->next = NULL;
        if (pHead == NULL)
        {
            pHead = pCur = pM;
        }
        else
        {
            pCur->next = pM;
            pCur = pM;
        }
    }
    printf("num的值为-1,存值结束");
    return pHead;
}
2020-03-20 19:17
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
得分:0 
回复 3楼 forever74
    if (num == -1)
    {
        break;
    }

已经解决了 加个这个就OK
2020-03-20 19:40
d7se123
Rank: 2
等 级:论坛游民
帖 子:65
专家分:14
注 册:2020-3-13
得分:0 
回复 3楼 forever74
大佬 我新的代码 遇到问题了  头指针和头结点 分别怎么用代码实现 ?
大致讲一下就OK 我去修改代码
2020-03-24 19:28
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
得分:0 
呵呵,别问我

一个快乐的小小孩
2020-03-25 09:07



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




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

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