我想创建一个函数,将双向链接列表中的项目移到列表末尾。如果要具有结构列表,则该结构内部必须具有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是它的尾巴,我想做一个函数,你可以给结构列表* l和list_elem * e并将其转换为这个(本例中,我将移动1)h -- 2 -- 3 -- 1 -- t
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
至少有两种一般方法可以实现端到端操作:
从列表中删除目标节点,然后将其附加在末尾;或
在循环中,只要目标节点不是最后一个节点,就将其与后继节点交换。
实现上述任一方法的常用方法将涉及操纵节点的prev
和next
指针,但请注意,问题中出现的swap()
函数不会执行< em> node 交换,而是 pointer 交换。您可以通过提供的(pointer)swap()
函数来实现选项(2)中描述的节点交换,但是它比直接使用所涉及的指针更丑陋,更混乱并且更容易出错。 (您的swap()
更适合用于指针数组而不是链接列表。)
其他细节留在原定的练习中。