gpt4 book ai didi

c - 我教授的链表代码,有点困惑

转载 作者:行者123 更新时间:2023-11-30 17:40:10 24 4
gpt4 key购买 nike

typedef struct node{        
int data;
struct node *next;
} Node, *NodePtr;

int main(…){
NodePtr firstNode = NULL;

}

NodePtr insertAtHead(NodePtr head, int data) {
/* create and fill the new node*/
NodePtr newNode = (NodePtr)malloc(sizeof(Node)); /*check that malloc does not return NULL, if yes – output an error and exit */
newNode->data = data;
newNode->next =NULL;
/* add it to the beginning of linked list*/
if (firstNode==NULL) /*linked list is empty*/
firstNode=newNode;
else {
newNode->next = firstNode;
firstNode = newNode; }
return firstNode; }

我收到了这个代码作为我作业的基础。我在传递节点指针(firstNode)时遇到问题。我收到错误:“insertAtHead”的类型冲突。我确实看到了定义中的问题。第一个节点称为 head,但其他地方称为firstNode。我确实做了这个改变,我只是不知道如何传递这个指针。只是为了展示我们得到的原始代码,我直接从讲义中发布了代码。感谢您提前提供的帮助。

最佳答案

您正在编写正确的解决方案,但执行起来就好像它不在函数中一样。它应该看起来像这样:

#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
} Node, *NodePtr;

// prototypes
NodePtr insertAtHead(NodePtr head, int data);

int main()
{
NodePtr head = NULL;
head = insertAtHead(head, 1);
head = insertAtHead(head, 2);

// etc.
}

NodePtr insertAtHead(NodePtr head, int data)
{
NodePtr newNode = malloc(sizeof(*newNode));
if (!newNode)
{
perror("failed to allocate node");
exit(EXIT_FAILURE);
}
newNode->data = data;
newNode->next = head;
return newNode;
}

注意(1)函数原型(prototype)的放置。这将消除您的第一个错误。 (2)插入函数中的逻辑。这将解决与未知变量 firstNode 相关的下一个错误,并正确地将节点链接为新列表头,为调用者返回新头。

关于c - 我教授的链表代码,有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592842/

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