将项目移动到C中的双链表的末尾

时间:2020-10-24 12:03:20

标签: c pointers doubly-linked-list

我想创建一个函数,将双向链接列表中的项目移到列表末尾。如果要具有结构列表,则该结构内部必须具有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

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

至少有两种一般方法可以实现端到端操作:

  1. 从列表中删除目标节点,然后将其附加在末尾;或

  2. 在循环中,只要目标节点不是最后一个节点,就将其与后继节点交换。

实现上述任一方法的常用方法将涉及操纵节点的prevnext指针,但请注意,问题中出现的swap()函数不会执行< em> node 交换,而是 pointer 交换。您可以通过提供的(pointer)swap()函数来实现选项(2)中描述的节点交换,但是它比直接使用所涉及的指针更丑陋,更混乱并且更容易出错。 (您的swap()更适合用于指针数组而不是链接列表。)

其他细节留在原定的练习中。

相关问题