[英]Linked list troubles list not linking to head pointer
我在處理此鏈接列表時遇到了麻煩,特別是好像我的頭指針未鏈接到列表的其余部分,我對為什么沒有鏈接感到困惑。 我按引用插入我的頭部指針的地方沒有連接到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;
}
錯誤是您將所有內容鏈接到頭
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;
您可以循環執行以下步驟:
newnode = malloc(sizeof(Nodeptr));
newnode->number = rand()%50+50;
newnode->next =NULL;
head -> next = newnode;
您正在將newnode-> next設置為指向null,並且將head-> next設置為指向newnode。
這意味着,每次循環時,您的頭都會得到一個新的提示,僅此而已。
實際上,每次通過循環時,您都將前一個新節點放在地板上,並鏈接到一個新節點。 最后,您的頭將指向1個節點,並且將有98個節點掉落到您無法到達的地板上。
您需要維護“ tail”指針或“ head”的副本,並將head或tail或其他內容設置為newnode的最新值。 然后,您可以設置tail->next = newnode; tail = newnode;
tail->next = newnode; tail = newnode;
這將持續擴展您的列表,而不是每次都覆蓋相同的head-> next。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.