我正在尝试将选定的元素(节点)从链接列表移动到此列表的末尾。
struct* move(struct* list , struct* element)
{
while(list->next != NULL)
{
list = list->next;
}
list = element;
return list;
}
首先,结构
element
是list
的一部分,但我需要将其移到末尾。但是,他的所作所为似乎在起作用... 最佳答案
当您执行list = element;
时,实际上是使list
指向element
,这不会更改列表。
您想要做的是:
list->next = element;
element->next = NULL;
但是您仍然需要从其先前位置删除
element
。 move()
的示例为:struct struct_type * move(struct struct_type * list , struct struct_type * element) {
while (list->next != NULL) {
if (list->next == element)
list->next = list->next->next;
list = list->next;
}
list->next = element;
element->next = NULL;
return list;
}
如注释中所述,您必须指定列表的结构类型。
还要注意,返回
list
返回列表中的最后一个元素(我认为这不是预期的行为)。编辑:对待第一个元素并返回列表的顶部元素。
struct struct_type * move(struct struct_type * list , struct struct_type * element) {
struct struct_type *l = list; //keeps reference to the list
if (l == NULL)
return l;
if (l == element)
list = l->next;
while (l->next != NULL) {
if (l->next == element)
l->next = l->next->next;
l = l->next;
}
l->next = element;
element->next = NULL;
return list;
}