【发布时间】:2020-10-24 12:03:20
【问题描述】:
我想创建一个函数,将双向链表中的项目移动到其列表的末尾。如果您想拥有一个结构列表,则该结构需要在其中包含一个 list_elem。在这里。
struct list_elem
{
struct list_elem *prev; /* Previous list element. */
struct list_elem *next; /* Next list element. */
};
在列表中也有头部和尾部。在提供的代码中,有一个 swap() 函数接受两个指向 list_elem 指针的指针,但我对如何使用它来移动列表中的项目有点困惑。这是。
static void
swap (struct list_elem **a, struct list_elem **b)
{
struct list_elem *t = *a;
*a = *b;
*b = t;
}
如果我有一个像 h -- 1 -- 2 -- 3 -- t 这样的列表,其中 h 是它的头部,t 是它的尾部,我想做一个函数,你可以给 struct list *l 和 list_elem *e 并将它转换成这个 (这个例子我会移动 1) h -- 2 -- 3 -- 1 -- t
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
如果我有一个像
h -- 1 -- 2 -- 3 -- t这样的列表,其中 h 是它的头部,t 是它的尾部,我想做一个函数,你可以给 struct list *l 和 list_elem *e 和把它转换成这个(这个例子我将移动1)h -- 2 -- 3 -- 1 -- t -
只要不断交换元素与其后继元素,直到它是最后一个元素。一个更有效的解决方案是简单地删除元素并将其插入到列表的末尾。
-
那个
swap函数会导致next/prev指针不匹配的节点。
标签: c pointers doubly-linked-list