【发布时间】:2020-05-13 04:36:27
【问题描述】:
我需要使用链表实现一些分而治之的算法(二分查找、归并排序等)。
为此,我需要定义一个方法,将某个列表一分为二,使它们之间的大小差异最大为 1 个元素。
这是我的结构:
typedef struct linked_list *L;
typedef struct linked_list{
int info;
L next;
};
L 是指向linked_list 的指针。
下面的代码是我尝试将给定列表分成前后两半的算法。
我想不出返回两个生成列表的方法,所以我将两个空列表作为参数传递。
void split_list(L r, L front, L back){
L a = r->next;
L b = r;
while( a ){
a = a->next;
if ( a->next ){
a = a->next;
b = b->next;
}
}
back = b->next;
front = r;
b->next = NULL;
}
但是,当您在 main 上运行该函数时,它无法按预期工作。
L z = NULL;
/ insert some nodes in z /
L x = NULL;
L y = NULL;
split_list(z, x, y);
尝试打印x 和y,它们是空的(显然)。
我认为问题在于列表作为参数传递的方式,但我不知道如何解决这个问题。
【问题讨论】:
标签: c linked-list structured-data