[英]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.