簡體   English   中英

鏈表C-添加節點后僅打印最后一個值

[英]Linked Lists C - after adding nodes print only the last value

在閱讀了有關鏈表的信息后,我開始弄亂它,我定義了struct,將其插入其中,但是面對一些我不理解的問題,也許我做錯了一些,但我認為我需要您的建議或啟發。

這是我的代碼:

struct node {
    int val;
    struct node * next;
};

typedef struct node item;

item printcurr(item *curr){
    printf("curr -> val %d\n",curr->val);
}

item addnode(item *curr,item *head,int num){
    curr->val=num;
    curr->next = head;
    head=curr;
}

void main() {
    item * curr, * head;
    int i,ITEMS,num;

    head = NULL;
    printf("How many items? \n");
    scanf("%d",&ITEMS);
    printf("Insert your numbers please\n");
    for(i=1;i<=ITEMS;i++) {
        curr = (item *)malloc(sizeof(item));
        scanf("%d",&num);
        addnode(curr,head,num);
    }

    while(curr) {
        printcurr(curr);
        curr = curr->next ;
    }
}

例如,我得到ITEM 3的編號,然后插入1,2,3,輸出將為3。 我將如何打印所有列表,而不僅僅是最后一個號碼?

問題在於addnote()。 不會更改main()中head的值,因為僅修改addnode()中head的本地版本。 (作為補充說明:addnote()應該返回void。)

改為使用

void addnode(item *curr, item **head, int num) {
    curr->val  = num;
    curr->next = *head;
    *head = curr;
}
...
addnode(curr, &head, num);

替代版本:

void addnode(item *curr, item *head, int num) {
    curr->val  = num;
    curr->next = *head;
}
...
addnode(curr, head, num);
head = curr;

讓我們看一下執行打印的循環:

while(curr) {

  printcurr(curr);
  curr = curr->next ;
}

請注意,這假設curr指向一個節點。 你還沒告訴哪里curr應該開始。 根據您的描述, curr點位於列表中的最后一個節點,因此這是唯一打印出來的節點。 您需要設置curr在開始head

另外,我建議將其分成自己的功能。 這將使您的代碼更易於理解和維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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