鱼C论坛

 找回密码
 立即注册
查看: 1422|回复: 3

[已解决]链表问题

[复制链接]
发表于 2023-10-4 18:52:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
最佳答案
2023-10-4 19:02:56
莱州刘德华 发表于 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`,而不是链表中的某个节点的指针。

希望这次能够解决您的问题,如果还有其他疑问,请随时告诉我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-4 18:52:18 | 显示全部楼层
这段代码中,list指向的是head节点,通过add_behind函数添加了4个节点,即链表中有4个节点。然后通过list = list->next; 将list指向了第二个节点,即值为2的节点。所以在调用middleElement函数时,返回的是链表中间节点的值,即3。

但是在调用iscycle和reverse函数时,传入的参数list已经不是指向head节点的指针了,而是指向值为2的节点的指针。所以这两个函数的结果是不正确的。

如果想要在调用完middleElement函数后,继续使用原链表,可以在调用middleElement函数前,先将list指向head节点,即list = &head;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-4 18:54:20 | 显示全部楼层
isdkz 发表于 2023-10-4 18:52
这段代码中,list指向的是head节点,通过add_behind函数添加了4个节点,即链表中有4个节点。然后通过list = ...

可是,运行完了以后,不是答案错误,是会报错的
但是不加那一会就是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-4 19:02:56 | 显示全部楼层    本楼为最佳答案   
莱州刘德华 发表于 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`,而不是链表中的某个节点的指针。

希望这次能够解决您的问题,如果还有其他疑问,请随时告诉我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表