簡體   English   中英

鏈接列表故障列表未鏈接到頭指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM