繁体   English   中英

添加到链表的头部

[英]Adding to head of linked list

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);
}

这是正在输出的内容:

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

它可以通过以下方式查找示例

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;
}

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

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

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

您正在从函数返回。

你如何调用这个函数? 调用者应该做

head = addToHead(head, 3) 

例如。

你想要的更像

Student *addToHead(Student **head, int data) {
    Student *tmp = NULL;
    tmp = createNode(data);
    tmp->nextPtr = *head;
    *head = tmp;
    return tmp;
}

然后用

addToHead(&listHead, 42);

或者保留您的版本并使用以下命令调用它:

listHead = addToHead(listHead, 42);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM