在这里阅读链接列表之后,我开始搞乱它,我定义了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.我在这里遗漏了一些东西;我将如何打印所有列表,而不仅仅是最后一个数字?
答案 0 :(得分: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;
答案 1 :(得分:2)
让我们看一下打印的循环:
while(curr) {
printcurr(curr);
curr = curr->next ;
}
请注意,这假设curr
指向节点。你还没有告诉curr
应该从哪里开始。根据您的描述,curr
指向列表中的最后一个节点,因此这是唯一一个打印出来的节点。您需要将curr
设置为从head
开始。
另外,我建议把它分成它自己的功能。它将使您的代码更容易理解和维护。