经过google
和stackoverflow
的搜索数小时,终于无法发布一种明显的方法来为linked-list
push
功能。
我想制作push
功能,在特定linked-list
结束时添加新node
和新value
。我最后一次努力如下所示,但它不起作用。
我在哪里犯了错误,我该如何解决?
#include <stdio.h>
#include <stdlib.h>
struct node{
int value;
struct node *next;
};
typedef struct node node_t;
void push(node_t *h, int val){
//copy value head
node_t *copy;
copy = h;
//reach to last node
while(copy->next != NULL)
copy = h->next;
//make new node and value "val"
copy->next = malloc(sizeof(node_t));
copy->next->next = NULL;
copy->next->value = val;
}
int main(){
node_t h;
h.next = NULL;
push(&h, 100);
push(&h, 200);
push(&h, 300);
printf("%d", h.next->value);
return EXIT_SUCCESS;
}
附加信息:
它已正确编译,但未运行。
我使用TDM-GCC
和C
语言而不是C++
.
这个循环是错误的,
//reach to last node
while(copy->next != NULL)
copy = h->next;
您一次又一次地分配h->next
。当h->next
不NULL
并且h->next->next
不NULL
时,这将是一个无限循环。
循环应为:
//reach to last node
while(copy->next != NULL)
copy = copy->next;