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