链接列表故障列表没有链接到头指针

时间:2017-04-23 17:20:53

标签: c

我一直遇到这个链表的问题,特别是我的头指针似乎没有链接到我的列表的其余部分,我很困惑为什么它不是。我通过引用按指针插入我的头指针的地方它没有连接到main中引用的链表。除非列表没有在主函数中链接在一起,否则我会遗漏一些东西。

#include <stdio.h>
#include <stdlib.h>


typedef struct node{
    int number;
    struct node * next;
} Node;

typedef Node * Nodeptr;

void printlist (Node * head){
    Node * n = head;

    while(n != NULL){
        printf("%d\n",n ->number);
        n = n ->next;
    }

}
void sumlist (Node * head){
    Node * n = head;
    int sum;
    while(n != NULL){
        sum = n ->number +sum;
        n = n ->next;
    }
    printf("the total of all numbers in this list is %d",sum);
}
search(head){



}
int main(){
    int i =0;
Nodeptr head=NULL;

if((head = malloc(sizeof(Node))) == NULL)
return 0;

head->number =rand()%50+50;
head ->next = malloc(sizeof(Node));

int n;


Nodeptr newnode = NULL;
for(n=0;n<99;n++)
{

newnode = malloc(sizeof(Nodeptr));  

newnode->number = rand()%50+50;
newnode->next =NULL;
head -> next = newnode;



}


printlist(head);
sumlist(head);


return 0;
}

2 个答案:

答案 0 :(得分:2)

错误在于您将所有内容链接到头部

  head -> next = newnode; 

您需要使用更新的指针:

Nodeptr newnode = NULL;
Nodeptr last = head;
for(n=0;n<99;n++)
{
  newnode = malloc(sizeof(Nodeptr));  
  newnode->number = rand()%50+50;
  newnode->next =NULL;
  last -> next = newnode;
  last = last->next;
}

你也应该改变这个:

head ->next = malloc(sizeof(Node)); // otherwise you will lose this element.

进入

head ->next = NULL;

答案 1 :(得分:0)

您可以循环执行这些步骤:

newnode = malloc(sizeof(Nodeptr));  
newnode->number = rand()%50+50;
newnode->next =NULL;
head -> next = newnode;

您正在设置newnode-&gt;旁边指向null,并且head-&gt; next指向newnode。

这意味着,每次通过循环时,你的头会得到一个新的,这就是它。

实际上,每次通过循环时,都会将之前的新节点放在地板上,并链接到新节点。最后,您将指向一个节点,并且您将无法覆盖到地面上的98个节点。

你需要保持一个尾巴&#34;指针或&#34; head&#34;的副本,并将head或tail或其他内容设置为newnode的最新值。然后,您可以设置tail->next = newnode; tail = newnode;,这将不断扩展您的列表,而不是每次都覆盖相同的头 - >。