嗯,首先, 我不得不承认,我真的没有实现链表,嗯,说实话,我最近没有使用C.
所以我确定这是一个非常愚蠢的简单bug。
嗯(不知道为什么 - 但我只是喜欢这个词), 我试着刷新一下,然后决定实现一些简单的链表。
void addToLast(linkedList* head, int data) {
linkedList* ptr = head; // points to ptr
while(ptr) /* p ins't null */ ptr = ptr->next;
// ptr now is null
ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node
if(ptr == NULL) printf("DAFUQ Null\n");
ptr->num = data;
ptr->next = NULL;
// return!
return;
}
好吧,由于某些奇怪的原因,每次迭代时ptr的值都是NULL。
似乎每当我调用addToLast
函数时,ptr都会保持为NULL。
我真的不知道为什么 - 或者我真的很累,或者我只是有一个愚蠢的问题。
好吧,正如我所说 - 我无法理解为什么ptr保持NULL,
我分配了一个新节点 -
ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node
那么为什么ptr不能保存它的价值?
主要&打印功能:
void printList(linkedList* list) {
linkedList* p;
putchar('[');
for(p = list;p;) {
printf("%d, ",p->num);
p = p->next;
}
putchar(']');
}
int main() {
// create list
linkedList *root = (linkedList*)malloc(sizeof(linkedList));
root->next = NULL;
addToLast(root,0);
addToLast(root,5);
printList(root);
system("pause");
return 0; // blet :o
}
答案 0 :(得分:1)
在你的函数中你永远不会分配你的下一个前一个元素,并且当ptr指向null时你必须在那之前停止你的循环
void addToLast(linkedList* head, int data) {
linkedList* ptr = head; // points to ptr
linkedList* last= null; // new element
last = (linkedList*)malloc(sizeof(linkedList)); // we have new node
if(last == NULL)
printf("DAFUQ Null\n");
last ->num = data;
last ->next = NULL;
while(ptr->next!=null)
ptr = ptr->next;
ptr->next=last;
}
答案 1 :(得分:0)
嗯,问题是列表中的最后一个节点仍然指向NULL
。您必须保存最后一个节点:
void addToLast(linkedList* head, int data) {
linkedList* ptr = head, *last; // points to ptr
while(ptr) /* p ins't null */ {
last = ptr;
ptr = ptr->next;
}
// ptr now is null
ptr = (linkedList*)malloc(sizeof(linkedList)); // we have new node
if(ptr == NULL) printf("DAFUQ Null\n");
ptr->num = data;
ptr->next = NULL;
last->next = ptr;
// return!
return;
}
或者像那样
void addToLast(linkedList* head, int data) {
linkedList* ptr = head;
while(ptr->next) ptr = ptr->next;
ptr->next = (linkedList*)malloc(sizeof(linkedList)); // we have new node
if(ptr == NULL) printf("DAFUQ Null\n");
ptr->next->num = data;
ptr->next->next = NULL;
}
答案 2 :(得分:0)
void addToLast(linkedList **head , int data){
linkedList *temp, *r;
temp = *head;
if(*head == NULL)//list is empty create first node
{
temp = malloc(sizeof(linkedList));
temp->num = data;
temp->next = NULL;
*head = temp;
}
else
{
//go to last node
while(temp->next!=NULL)
temp = temp->next;
//add node at end
r = malloc(sizeof(linkedList));
r->num = data;
r->next = NULL;
temp->link = r;
}
}
我刚刚将指针头作为指针指向linkdList **head
而不是linkedList *head