gpt4 book ai didi

c - 我的链表实现有什么问题?

转载 作者:行者123 更新时间:2023-11-30 15:54:57 25 4
gpt4 key购买 nike

首先,我必须承认,我确实没有实现过链表,嗯,说实话,我最近没有使用C。

所以我确信这是一个非常愚蠢的简单错误。

嗯(不知道为什么 - 但我就是喜欢这个词),我试着刷新一下我的想法,然后我决定实现一些简单的链表。

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
}

最佳答案

在你的函数中,你永远不会分配前一个最后一个元素的下一个,并且当 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;
}

关于c - 我的链表实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com