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。我做了那个改变,我只是迷失了如何传递这个指针。为了显示我们给出的原始代码,我直接从讲义中发布了代码。感谢您的帮助。
答案 0 :(得分:0)
您正在编写正确的解决方案,但这样做就好像它不在函数中一样。它应该是这样的:
#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)函数原型的放置。这将平息你的第一个错误。 (2)插入函数中的逻辑。这将解决有关未知变量firstNode
的下一个错误,并将节点正确链接为新列表头,为调用者返回新头。