#include<stdio.h>
#include<stdlib.h>
struct node {
int num;
struct node *next;
}*head=NULL, *curr=NULL;
void print(){
curr = head;
while(curr != NULL){
printf("%d\n", curr->num);
curr = curr->next;
}
}
struct node* memAlo(){
return (struct node *)malloc(sizeof(struct node));
}
void addNode(int no){
curr = head;
while(curr != NULL){
curr = curr->next;
}
curr = memAlo();
if(curr == NULL){
printf("\nmemory up\n");
return;
}
else{
curr->num = no;
curr->next = NULL;
printf("%d\n",curr->num);
}
}
void hellop(){
printf("%d", head->num);
}
int main(){
int i;
curr = head;
for(i=1;i<10;i++){
addNode(i);
}
print();
/*head = memAlo();
head->num = 1;
head->next = NULL;
hellop();*/
}
我确信我已经搞砸了。问题是头指针没有得到memAlo()fn()分配的内存但是如何到达那里?请帮忙
我正在尝试创建一个包含1到9数字的单链表,并使用print()打印它们。实际上AddNode()是每次在main()中执行for循环时在链表的末尾创建单个节点。
答案 0 :(得分:1)
您在首次定义head = NULL
的位置设置了head
。除了那个地方,我们从未在您的计划中的任何位置head
的左侧看到=
。当然,head
总是等于NULL
,而不是其他任何东西。
您可能希望在addNode
函数的开头插入一些代码来测试此时是否head == NULL
;如果确实如此,您需要将memAlo()
的结果分配给head
而不是curr
。您还必须调整其他一些逻辑。
答案 1 :(得分:0)
您分配节点的代码是错误的。它应该创建一个节点,为它创建一些空间,然后返回它。
struct node *memAlo() {
struct node *nd = malloc(sizeof(*nd));
return nd;
}
这会创建一个指向节点的指针,正确分配它,然后返回它。
答案 2 :(得分:0)
我看到的问题:
head == NULL
。创建彼此未链接的节点。
curr = memAlo();
allocated memory for a node and returns it to you, but it does not connect the node with anything else.
醇>
Try this:
void addNode(int no){
struct node* temp = NULL;
// Deal with an empty list.
if ( head == NULL )
{
head = memAlo();
head->num = no;
head->next = NULL;
}
// Move curr until we reach the last node of the list.
curr = head;
while(curr->next != NULL){
curr = curr->next;
}
temp = memAlo();
if(temp == NULL){
printf("\nmemory up\n");
return;
}
else{
// Link the new node to the previous last node.
temp->num = no;
temp->next = NULL;
printf("%d\n",temp->num);
curr->next = temp;
}
}
答案 3 :(得分:0)
似乎因为head
最初是NULL
,然后你开始分配节点而不保存第一个地址,你就丢失了第一个地址,然后就可以了。从头开始走列表。
您注释掉的部分说明了问题。
作为旁注,您的计划中没有free
。请记住始终free
记住alloc
答案 4 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
struct node
{
int num;
struct node *next;
};
struct node *head, *curr;
struct node *pos;
void addNode(int n)
{
if(head==NULL)
{
head = (struct node*)malloc(sizeof(struct node));
head->num = n;
head->next = NULL;
curr = head;
}
else
{
while(curr != NULL)
{
pos = curr;
curr = curr->next;
}
curr = (struct node*)malloc(sizeof(struct node));
curr->num = n;
curr->next = NULL;
pos->next = curr;
}
}
void printList()
{
curr = head;
while(curr != NULL)
{
printf("%d",curr->num);
curr = curr->next;
}
}
int main()
{
head = NULL;
curr = head;
int i, a[] = {4,5,1,2,3,9,0};
for(i=0;i<7;i++)
{
addNode(a[i]);
}
curr = head;
printList();
}
这似乎解决了我的问题。我想通了。谢谢你的帮助。