【发布时间】:2017-07-23 23:36:30
【问题描述】:
我已经使用此代码成功实现了 2 指针解决方案:
void list_reverse(t_list **begin_list)
{
t_list *new_root;
t_list *root;
t_list *next;
new_root = 0;
root = *(begin_list);
while (root)
{
next = root->next;
root->next = new_root;
new_root = root;
root = next;
}
*begin_list = new_root;
}
效果很好 - 至少根据我的测试。现在我想尝试仅使用单个指针来反转链表,而不使用return,所以我尝试将我的代码转换为void list_reverse(t_list *begin_list),但是*begin_list = new_root 当然不起作用,因为我不能更改begin_list。其余的似乎都可以工作。
如何在没有双指针的情况下修改begin_list?
编辑:结构是:
typedef struct s_list
{
struct s_list *next;
void *data;
} t_list;
【问题讨论】:
-
你尝试过使用递归吗?
-
对函数参数的修改对函数调用者不可见。也不在您提供的代码中。 (你的函数改变了它的参数指向的对象,调用者碰巧也能看到它;这不是一回事。)但是你可以通过函数的返回将修改后的指针提供给调用者价值。
-
这是不可能的,因为它不能改变第一个元素。 (将第一个元素设为虚拟时除外。)
-
@JohnBollinger 没有返回
-
@Luke,你错过了重点。 OP 已经知道如何使用指向指针的方法来做到这一点。问题是如何使用(单)指针直接指向列表节点:“我如何修改 begin_list 没有双指针?” (强调)。
标签: c pointers linked-list