我需要帮助。我试图创建一个单链表。到目前为止一切都很好,但我输错了。我不知道我的错误。谢谢!
我的输出是:
create a single linked list
list:
aaaaa
-1342177280
我的代码是:
struct node{
int key;
int val;
struct node *next;
};
struct node *create_single_link(){
struct node *head = malloc(sizeof(struct node));
head->next = NULL;
return(head);
}
void insertVal( struct node *lst, int v){
struct node *current = malloc(sizeof(struct node));
current -> val = v;
current->next = lst;
lst = current;
}
void print_list(struct node * head){
struct node *ptr = head;
printf("list:\n");
while(ptr != NULL ){
printf("aaaaa\n");
printf("%d \n ",ptr ->val );
ptr = ptr->next;
}
}
int main(int argc, char const *argv[])
{
struct node *list;
list = create_single_link();
if(list != NULL){
printf("create a single linked list\n");
}
else
printf("failed to create a single linked list\n");
insertVal(list,2222);
//insertVal(list,2);
print_list(list);
return 0;
}
答案 0 :(得分:3)
问题1
你有:
void insertVal( struct node *lst, int v){
struct node *current = malloc(sizeof(struct node));
current -> val = v;
current->next = lst;
lst = current;
}
这不会改变list
中main
的值。它仅在函数中lst
指向本地的位置。
我建议将功能更改为:
struct node* insertVal( struct node *lst, int v){
struct node *current = malloc(sizeof(struct node));
current -> val = v;
current->next = lst;
return current;
}
并将其用作:
list = insertVal(list, 2222);
问题2
create_single_link
中创建的节点的值未初始化。最好不要使用它。您可以将main
更改为:
int main(int argc, char const *argv[])
{
struct node *list = NULL;
list = insertVal(list,2222);
list = insertVal(list,2);
print_list(list);
return 0;
}
答案 1 :(得分:0)
insertVal
修改lst
但不返回。
这意味着只能添加一个项目。
您正在使用初始化v
答案 2 :(得分:0)
insertVal()
)print_list()
中,您假设与我的项目1.和2.上面相反:您尝试打印出与头部相关联的val
(这是针对上面的第2项),并假设其余的列表元素跟随头部(这与上面的第1项相对)。 我建议原样离开print_list()
,但要更正前两项。 struct node
有两个字段(key
和val
)但您的insertVal()
仅填充vall
。虽然本身不是错误,但是很快就会忘记为key
分配有意义的值。
快乐的编码: - )答案 3 :(得分:0)
事实上,你的fucntion插入值没有任何意义,如果你想在链表的末尾插入一个值,我希望下面的代码可以帮助你。
#include <stdio.h>
#include <stdlib.h>
struct node{
int key;
int val;
struct node *next;
};
struct node *create_single_link() {
struct node *head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
return (head);
}
void insertVal (struct node *lst, int v) {
while(lst->next != NULL) {
lst = lst->next;
}
lst->next = (struct node*)malloc(sizeof(struct node));
lst->next->val = v;
lst->next->next = NULL;
}
void print_list(struct node *ptr) {
while(ptr != NULL) {
printf("the key is %d and the value is %d\n", ptr->key, ptr->val);
ptr = ptr->next;
}
}
void main(void) {
struct node *list;
list = create_single_link();
if(list != NULL)
printf("a single list has been created\n");
else
printf("faied to create a single list\n");
list->val = 1111;
insertVal(list, 2222);
insertVal(list, 3333);
print_list(list);
}