我一直遇到这个链表的问题,特别是我的头指针似乎没有链接到我的列表的其余部分,我很困惑为什么它不是。我通过引用按指针插入我的头指针的地方它没有连接到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;
}
答案 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;
,这将不断扩展您的列表,而不是每次都覆盖相同的头 - >。