鱼C论坛

 找回密码
 立即注册
查看: 2891|回复: 9

链表程序逻辑错误。。。

[复制链接]
发表于 2012-2-12 01:00:27 | 显示全部楼层 |阅读模式
2鱼币
在火车上无聊在纸上写的 输出有误
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Nod
{
int num;
struct Nod * Next;
}NOD, *PNOD;
PNOD creat_list();
void show_list(PNOD pHead);
int main(void)
{
PNOD pHead = NULL;
pHead = creat_list();
show_list( pHead );
return 0;
}
PNOD creat_list()
{
PNOD P = NULL, pTail = NULL, pHead = NULL;
int len=3, i, val;
pHead = (PNOD)malloc(sizeof(NOD));
printf("Please enter the quantity of nodes: ");
scanf("%d", &len);

pTail = pHead;
pTail->Next = pHead;
for(i=0; i<len; i++)
{
  P = (PNOD)malloc(sizeof(NOD));  
  printf("\n第%d个节点数据: ", i+1);
  scanf("%d", &val);
  
  P->num = val;
  pTail->Next = P;
  pTail = P;
  P->Next = NULL;
  
}
printf("\n\n");

return pHead;
}
void show_list(PNOD pHead)
{
PNOD p = pHead->Next;

while ( p )
{
  printf("%d ", &p->num);
  p = p->Next;
}
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-12 01:36:36 | 显示全部楼层
没想到身为菜鸟的我随便改了几行居然改好了
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Nod
{
        int num;
        struct Nod * Next;
}NOD, *PNOD;
PNOD creat_list();
void show_list(PNOD pHead);

int main(void)
{
        PNOD pHead = NULL;
        pHead = creat_list();
        show_list( pHead );
        return 0;
}
PNOD creat_list()
{
        PNOD P = NULL, pTail = NULL, pHead = NULL;
        int len=3, i, val;
        pHead = (PNOD)malloc(sizeof(NOD));
        printf("Please enter the quantity of nodes: ");
        scanf("%d", &len);
       
        pTail = pHead;
        pHead->Next=NULL;

        for(i=0; i<len; i++)
        {
                P = (PNOD)malloc(sizeof(NOD));  
                printf("\n第%d个节点数据: ", i+1);
                scanf("%d", &val);
                if (pHead->Next==NULL)
                {
                        pHead->Next=P;
                }
                else
                {
                        pTail->Next=P;
                }
                pTail=P;
                P->num = val;
                P->Next=NULL;
       
        }
        printf("\n\n");
       
        return pHead;
}
void show_list(PNOD pHead)
{
        PNOD p = pHead->Next;
       
        while ( p )
        {
                printf("%d ", p->num);
                p = p->Next;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-12 02:03:54 | 显示全部楼层
楼主除了逻辑错误还有一个关键的语法错误。
倒数第四行  &p->num 这是什么? 所以每次打印都是地址打印出来。

思路上就是要用if 区分表头是否为空。

以上两点是你的主要错误。

修正后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Nod
{
        int num;
        struct Nod * Next;
}NOD, *PNOD;
PNOD creat_list();
void show_list(PNOD pHead);
int main(void)
{
        PNOD pHead = NULL;
        pHead = creat_list();
        show_list( pHead );
        return 0;
}
PNOD creat_list()
{
        PNOD P = NULL, pTail = NULL, pHead = NULL;
        int len, i, val;
        pHead = (PNOD)malloc(sizeof(NOD));
        printf("Please enter the quantity of nodes: ");
        scanf("%d", &len);
        
        pTail = pHead;
        //pTail->Next = pHead;
        pHead->Next = pTail;
        pHead->Next = NULL;
        for(i=0; i<len; i++)
        {
                P = (PNOD)malloc(sizeof(NOD));  
                printf("\n第%d个节点数据: ", i+1);
                scanf("%d", &val);
                P->num = val;
                if (0 == pHead->num)
                {
                        pHead =  P;
                }else
                {
                        pTail = pHead;
                        pHead = P;
                        pHead->Next = pTail;
                }
        }
        printf("\n\n");
        
        return pHead;
}
void show_list(PNOD pHead)
{
        do 
        {
                printf("%d \n", pHead->num);
                pHead = pHead->Next;
        }while ( pHead->Next );
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-12 17:31:35 | 显示全部楼层
谢谢各位  其实就是  printf("%d \n", pHead->num);
这里错了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-12 20:41:19 | 显示全部楼层
您的C比我好。今后向您要好好学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-18 14:19:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-29 20:08:17 | 显示全部楼层
留个座
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-2 17:41:36 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-15 13:40:23 | 显示全部楼层
printf("%d \n", pHead->num);
这里错了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-15 16:31:27 | 显示全部楼层
很牛逼的样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 22:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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