我创建了一个函数,它将返回链表的基址。 它总是返回最后一个节点地址(null)而不是第一个节点。
#include<stdio.h>
#include<stdlib.h>
typedef struct _LinkedList
{
int data;
struct LinkedList *nextVal;
}LinkedList;
//function to create a linked list
LinkedList* createLL()
{
LinkedList *ll;
ll=malloc(sizeof(LinkedList));
ll->nextVal =malloc(sizeof(LinkedList));
int i;
int count = 5;
for(i=0;i<5;i++)
{
ll->nextVal = malloc(sizeof(LinkedList));
ll->data = i;
printf("LL data value %d address val %p\n ",ll->data,ll->nextVal);
}
//last node should point to null
ll->nextVal=NULL;
printf("======================\n");
return ll;
}
int main()
{
LinkedList *basePtr;
int i;
basePtr=createLL();
for(i=0;i<5;i++)
{
printf("LL data value %d address val %p\n ",basePtr->data,basePtr->nextVal);
}
return 0;
}
答案 0 :(得分:1)
在createLL()
和main()
中,在两个for
循环内,您不更新列表的头指针,只是覆盖原始指针。 (例如,你没有链表,你有五个悬空节点,其中四个是泄漏内存)。这样的事情怎么样:
LinkedList *createLL()
{
LinkedList *head = NULL;
for (int i = 0; i < 5; i++) {
// use sizeof(*pointer) instead of sizeof(type), by the way
LinkedList *tmp = malloc(sizeof(*tmp));
tmp->next = head;
tmp->data = i;
head = tmp;
}
return head;
}
在main()
中重复这个模式,你很高兴。