链接列表程序未给出预期结果

时间:2012-08-08 19:21:01

标签: c algorithm linked-list

我想设置头 - > 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;
  }
}

2 个答案:

答案 0 :(得分:1)

看起来 head 最终位于列表的末尾,所以当您从 head 遍历时, head &#39;打印s值并且traverse()停止,因为 head-&gt; next 为空。

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

答案 1 :(得分:1)

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

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

因此,要将头部恢复到主要功能,您需要像上面add_beg(&head, i);一样调用它,并对add_beg()进行上述更改。