鱼C论坛

 找回密码
 立即注册
查看: 2668|回复: 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 区分表头是否为空。

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

修正后的代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. typedef struct Nod
  5. {
  6.         int num;
  7.         struct Nod * Next;
  8. }NOD, *PNOD;
  9. PNOD creat_list();
  10. void show_list(PNOD pHead);
  11. int main(void)
  12. {
  13.         PNOD pHead = NULL;
  14.         pHead = creat_list();
  15.         show_list( pHead );
  16.         return 0;
  17. }
  18. PNOD creat_list()
  19. {
  20.         PNOD P = NULL, pTail = NULL, pHead = NULL;
  21.         int len, i, val;
  22.         pHead = (PNOD)malloc(sizeof(NOD));
  23.         printf("Please enter the quantity of nodes: ");
  24.         scanf("%d", &len);
  25.        
  26.         pTail = pHead;
  27.         //pTail->Next = pHead;
  28.         pHead->Next = pTail;
  29.         pHead->Next = NULL;
  30.         for(i=0; i<len; i++)
  31.         {
  32.                 P = (PNOD)malloc(sizeof(NOD));  
  33.                 printf("\n第%d个节点数据: ", i+1);
  34.                 scanf("%d", &val);
  35.                 P->num = val;
  36.                 if (0 == pHead->num)
  37.                 {
  38.                         pHead =  P;
  39.                 }else
  40.                 {
  41.                         pTail = pHead;
  42.                         pHead = P;
  43.                         pHead->Next = pTail;
  44.                 }
  45.         }
  46.         printf("\n\n");
  47.        
  48.         return pHead;
  49. }
  50. void show_list(PNOD pHead)
  51. {
  52.         do
  53.         {
  54.                 printf("%d \n", pHead->num);
  55.                 pHead = pHead->Next;
  56.         }while ( pHead->Next );
  57. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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-4-27 06:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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