gpt4 book ai didi

c - 第一个元素在 C 中使用链表消失

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:18 25 4
gpt4 key购买 nike

我是学习 C 语言数据结构和抽象数据类型的初学者。我正在创建一个简单的链表实现,但是当我尝试打印该列表时,我似乎丢失了第一个元素。 Node 类型只包含一个整数和一个指向自身的指针。

我的主文件

  int main()
{
Node * List=createList();

int testData[] = {1,2,3,4,5,6};

for (int i = 0 ; i < 6 ; i++)
{
addFront(List,testData[i]);
printList(List);
printf("\n");
}

}

addToFront 及其支持的 initNode 定义如下:

 void addFront(Node * List, int value)
{
Node * toAdd = initNode(value);

toAdd-> next = List->next;

List->next = toAdd;
}



Node * initNode(int val)
{
Node * newNode = malloc(sizeof(Node));
newNode -> value = val;
newNode-> next = NULL;

return newNode;
}

编辑:根据要求,printList() 是:

  void printList(Node * List)
{
Node * original = List->next;

while (List->next != NULL)
{
printf("%d\n",List->value);
List = List ->next;
}

List = original;
}

有什么可能出错的想法吗?

最佳答案

您正在添加到前面,但您正在将 toAdd 中的下一个元素设置为 List->next。您正在跳过第一个元素。

此外,您将 List->next 设置为之后的 toAdd

你想要做的是这样的:

void addFront(Node** List, int value)
{
Node * toAdd = initNode(value);
toAdd->next = *List;
*List = toAdd;
}

传入一个指向 Node 指针的指针,它允许您从函数内部修改 head。

根据 alk 的评论,现在这样调用它:addFront(&List,testData[i]);

关于c - 第一个元素在 C 中使用链表消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443044/

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