我正在尝试将选定的元素(节点)从链接列表移动到此列表的末尾。

struct* move(struct* list , struct* element)
{

  while(list->next != NULL)
   {
      list = list->next;
   }

  list = element;
  return list;

}


首先,结构elementlist的一部分,但我需要将其移到末尾。但是,他的所作所为似乎在起作用...

最佳答案

当您执行list = element;时,实际上是使list指向element,这不会更改列表。

您想要做的是:

list->next = element;
element->next = NULL;


但是您仍然需要从其先前位置删除elementmove()的示例为:

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;
}

08-25 10:37
查看更多