鱼C论坛

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

链表从后面插入结点的问题,求助。。。

[复制链接]
发表于 2013-3-17 09:23:26 | 显示全部楼层 |阅读模式

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

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

x

复制代码
  1. 为什么这个从后面插入结点的程序不对,指点指点

  2. # include <stdio.h>
  3. # include <malloc.h>

  4. struct Node
  5. {
  6.         int data;
  7.         struct Node * pNext;
  8. };

  9. struct Node * create_list(void);
  10. void traverse_list(struct Node * pHead);
  11. void add_list1(struct Node * pHead);
  12. void add_list2(struct Node * pHead);

  13. int main(void)
  14. {
  15.         struct Node * pHead = NULL;

  16.         pHead = create_list();
  17.         traverse_list(pHead);
  18.         add_list2(pHead);       
  19.         traverse_list(pHead);


  20.         return 0;
  21. }

  22. struct Node * create_list(void)
  23. {
  24.         int number;
  25.         int i;
  26.         int len;
  27.         struct Node * p, * end;
  28.         struct Node * pHead = NULL;
  29.        
  30.         printf("需要创建几个结点:");
  31.         scanf("%d", &len);

  32.         printf("请输入:");
  33.         scanf("%d", &number);
  34.         p = (struct Node *)malloc(sizeof(struct Node));
  35.         p->data = number;
  36.         p->pNext = pHead;
  37.         pHead = p;
  38.         end = p;
  39.         for (i=1; i<len; ++i)
  40.         {
  41.                 scanf("%d", &number);
  42.                 p = (struct Node *)malloc(sizeof(struct Node));
  43.                 p->data = number;
  44.                 p->pNext = NULL;
  45.                 end->pNext = p;
  46.                 end = p;
  47.         }

  48.         return pHead;
  49. }

  50. void traverse_list(struct Node * pHead)
  51. {
  52.         struct Node * p = pHead;

  53.         while (p != NULL)
  54.         {
  55.                 printf("%5d", p->data);
  56.                 p = p->pNext;
  57.         }
  58.         printf("\n");

  59.         return;
  60. }

  61. //从后面插入结点
  62. void add_list2(struct Node * pHead)
  63. {
  64.         int val;
  65.         struct Node * p1;
  66.         struct Node * node;
  67.        
  68.         p1 = pHead;
  69.         while (p1 != NULL)
  70.         {
  71.                 p1 = p1->pNext;
  72.         }

  73.         printf("请输入添加的数据:");
  74.         scanf("%d", &val);
  75.         node->data = val;
  76.         p1 = node;
  77.         node->pNext = NULL;
  78.        

  79.         return;
  80. }


  81. 为什么这个从后面插入结点的程序不对,指点指点
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-17 18:09:50 | 显示全部楼层
第80行
struct Node * node;
你定义了node指针,但你却没有给其分配内存,其实node指向的是一个不属于此进程的内存。
struct Node * node = (struct Node *)malloc(sizeof(struct Node));
改成上面就应该能运行了,但是你只申请了内存,并没有释放,注意内存泄露问题
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-17 18:16:43 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-5 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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