【问题标题】:Linked list program not giving expected result [closed]链表程序没有给出预期的结果[关闭]
【发布时间】:2012-08-08 19:21:01
【问题描述】:

我正在尝试设置 head -> data =10,然后在链表的开头添加 10 个值 (101-110)。

目前我得到输出:10

有人可以帮我吗?

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node
{
 int data;
 struct node *next;
};
void main()
{
 struct node *head, emp;
 int num = 10, i;
 void add_beg(struct node *q, int n);
 void traverse(struct node *q);
 clrscr();
 head = (node*)malloc(sizeof(node));
 head->data = num;
 head->next = NULL;
 for (i= 101; i<=110; i++)
 {
  add_beg(head, i);
 }

 traverse(head);
 getch();

}

void add_beg(struct node *q, int num)
{
 int n = num;
 struct node *temp;
 temp = (node *)malloc(sizeof(node));
 temp->data = n;
 temp->next = q;
 q = temp;
}

void traverse(struct node *q)
{
while(q!=NULL)
  {
   printf("%d\n",q->data);
   q = q->next;
  }
}

【问题讨论】:

  • 请不要在main() 正文中声明函数原型,这很丑陋且令人困惑。
  • 请花点时间消化您在上一个问题中得到的答案,add_beg 中的q=temp 看起来很可疑。
  • 什么是指向 last 元素?只有指向下一个
  • @Mat 是的,它帮助我解决了问题!!!

标签: c algorithm linked-list


【解决方案1】:

您需要将void add_beg(struct node *q, int num) 更改为void add_beg(struct node **q, int num)

传递的指针不能更改,我的意思是实际地址被复制并且不会在 add_beg() 之外更改,指向的值可以更改。所以如果你有一个指向指针的指针,你可以改变指向的指针(head)。

因此,要回到您的主要功能,您需要像这样调用它add_beg(&amp;head, i);,并对 add_beg() 进行上述更改。

【讨论】:

    【解决方案2】:

    head 看起来好像在列表的末尾,所以当你从 head 遍历时,head 的值为由于 head->next 为空,打印和 traverse() 停止。

    您可以尝试让 add_beg() 返回 temp 指针,并使用 add_beg() 返回的最终值来调用 traverse()。

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2014-09-24
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多