链表问题
int main() {node head = {NULL,NULL};
node* list = &head;
add_behind(list, 2);
add_behind(list, 3);
add_behind(list, 1);
add_behind(list, 4);
list = list->next; 为什么这样就不对了呀,其他的地方是函数,这是一个链表
printf("%d", middleElement(list));
bool a = iscycle(list);
node* ls2 = reverse(list);
return 0;
} 这段代码中,list指向的是head节点,通过add_behind函数添加了4个节点,即链表中有4个节点。然后通过list = list->next; 将list指向了第二个节点,即值为2的节点。所以在调用middleElement函数时,返回的是链表中间节点的值,即3。
但是在调用iscycle和reverse函数时,传入的参数list已经不是指向head节点的指针了,而是指向值为2的节点的指针。所以这两个函数的结果是不正确的。
如果想要在调用完middleElement函数后,继续使用原链表,可以在调用middleElement函数前,先将list指向head节点,即list = &head; isdkz 发表于 2023-10-4 18:52
这段代码中,list指向的是head节点,通过add_behind函数添加了4个节点,即链表中有4个节点。然后通过list = ...
可是,运行完了以后,不是答案错误,是会报错的
但是不加那一会就是对的 莱州刘德华 发表于 2023-10-4 15:54
可是,运行完了以后,不是答案错误,是会报错的
但是不加那一会就是对的
这段代码中的问题在于链表节点的指针传递和修改。在调用`add_behind`函数时,我们并没有将新节点正确连接到链表中。导致在调用`middleElement`、`iscycle`和`reverse`函数时,参数list已经不是指向head节点的指针了。
修复方法如下:
int main() {
node head = {NULL, NULL};
node* list = &head;
add_behind(list, 2);
add_behind(list, 3);
add_behind(list, 1);
add_behind(list, 4);
list = head.next;// 将list指向头节点的下一个节点
printf("%d\n", middleElement(list));
bool a = iscycle(&head);// 需要传入头节点的指针
node* ls2 = reverse(&head);// 需要传入头节点的指针
return 0;
}
在调用`middleElement`、`iscycle`和`reverse`函数时,传入的参数应该是头节点的指针`&head`,而不是链表中的某个节点的指针。
希望这次能够解决您的问题,如果还有其他疑问,请随时告诉我。
页:
[1]