C 添加到链接列表的标题

C 添加到链接列表的标题,c,struct,linked-list,singly-linked-list,C,Struct,Linked List,Singly Linked List,这个代码没有插入到链表的头部,我不知道为什么。 我没有在链表的开头使用虚拟节点 以下是我的全部主要功能: Student *addToHead(Student *node, int data) { Student *temp; temp = createNode(data); temp->nextPtr = node; return temp; } 以下是正在输出的内容: int main(void) { Student *test = initL

这个代码没有插入到链表的头部,我不知道为什么。 我没有在链表的开头使用虚拟节点

以下是我的全部主要功能:

Student *addToHead(Student *node, int data) {
    Student *temp;
    temp = createNode(data);
    temp->nextPtr = node;
    return temp;
}
以下是正在输出的内容:

int main(void) {
    Student *test = initList();
    int searchTest = 0;

    test = addToHead(test, 3);
    test = addToHead(test, 2);
    test = addToHead(test, 1);
    test = addToTail(test, 4);
    test = addToTail(test, 5);

    printList(test);

    searchTest = searchAge(test, 4);
    printf("%d\n", searchTest);

    test = freeList(test);
}
尾巴插入正确,但头部插入不正确

这是tail的代码

4
5
0
Free was successful

这个函数怎么叫?打电话的人应该这样做

Student *addToTail(Student *node, int data) {
    Student *temp;
    temp = createNode(data);
    temp->age = data;

    if (node == NULL) {
        node = temp;
    } else {
        while (node->nextPtr != NULL) {
            node = node->nextPtr;
        }
        node->nextPtr = temp;
    }
    return node;
}
例如。

你想要的更像

然后用你的名字来称呼它

或者保留您的版本,并使用以下方式调用:


问题不在于函数
addToHead
。问题在于未显示的函数
addToTail

例如,它可以按以下方式查看

listHead = addToHead(listHead, 42);
编辑:在您的答案中添加了函数addToTail的定义之后,很明显,我说这个函数是错误的是对的

在函数中,您正在更改头部节点

Student *addToTail(Student *node, int data){
        Student *temp = createNode(data);

        if ( node == NULL )
        {
            temp->nextPtr = node;
            node = temp;
        }
        else
        {
            Student *tail = node;
            while ( tail->nextPtr != NULL ) tail = tail->nextPtr;
            // Uncomment the line below if createNode does not set the data member nextPtr to NULL
            // temp->nextPtr = NULL
            tail->nextPtr = temp;
        }

        return node;
}

您正在从函数返回

我的猜测是,您忽略了函数返回的内容。您没有展示如何使用函数。该函数执行所需的操作;不过,您必须正确使用返回值。确保您创建了一个MCVE()(或MRE或现在使用的任何名称)或一个SSCCE()。@joycem8845这可能是函数addToTail工作不正确的结果。显示它。@VladfromMoscow我现在添加了尾部代码。@joycem8845在您添加函数addToTail的定义之前,我已经写了我的答案。:)有一个参数,这应该是一个注释。还有一个论点认为这可能是正确的答案-OP没有正确捕获返回值,如图所示。是的,这正是我调用此函数的方式。@joycm8845-如果您调用如图所示的函数,然后,您需要更多地展示您使用函数的方式,以及如何知道新项不在列表的顶部。问题中的代码没有告诉我们这一点。看起来它确实应该起作用。您好,@JonathanLeffler,这是我在stackoverflow中的第一个答案,因此我不能发表评论。@JonathanLeffler我编辑了这个问题,以提供我的全部主要内容和输出内容。我说我不能直接通过reference@joycem8845不管怎样,编辑过的代码在其他地方有一个bug,addToHead应该可以工作是的,我的tail功能是错误的。非常感谢。@joycem8845-欢迎来到堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参阅本页,以及
addToHead(&listHead, 42);
listHead = addToHead(listHead, 42);
Student *addToTail(Student *node, int data){
        Student *temp = createNode(data);

        if ( node == NULL )
        {
            temp->nextPtr = node;
            node = temp;
        }
        else
        {
            Student *tail = node;
            while ( tail->nextPtr != NULL ) tail = tail->nextPtr;
            // Uncomment the line below if createNode does not set the data member nextPtr to NULL
            // temp->nextPtr = NULL
            tail->nextPtr = temp;
        }

        return node;
}
    while(node->nextPtr!=NULL){
        node=node->nextPtr;
    }