添加到链表的头部

joy*_*845 3 c struct linked-list singly-linked-list

Student *addToHead(Student *node, int data) {
    Student *temp;
    temp = createNode(data);
    temp->nextPtr = node;
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

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

这是我的整个主要功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

这是正在输出的内容:

4
5
0
Free was successful
Run Code Online (Sandbox Code Playgroud)

尾巴被正确插入,但不是头部。

这是尾巴的代码

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;
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 6

问题不在于功能addToHead。问题是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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:在你的答案加上函数 addToTail 的定义之后,很明显我说这个函数是错误的。

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

    while(node->nextPtr!=NULL){
        node=node->nextPtr;
    }
Run Code Online (Sandbox Code Playgroud)

您正在从函数返回。