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