【问题标题】:Deleting and appending list from a linked list从链表中删除和追加列表
【发布时间】:2011-03-05 17:58:34
【问题描述】:

我想删除一个列表并附加前端和后端列表并生成一个新列表。我有以下两种结构:

typedef struct term {
   SYMBOL symbol;
   union {
       LIST termlist;
       struct term* term;
   } super;
   LIST   args;
   NAT    stamp;
   NAT    size;
} *TERM, TERM_NODE;

typedef struct LIST_HELP {
   struct LIST_HELP *cdr;
   POINTER           car;
} LIST_NODE;

typedef LIST_NODE *LIST;

使用这两种结构,我有一个类似的 TERM:

forall([X8,X9],implies(connected(X8,X9),exists([V],and(or(equal(h_1(X8),U),equal(h_2(X8),U)),connected(U,X9)))

这里都是符号。假设如果 forall 是一个符号,那么其余的就充当forall 的参数。它是一种Term,由另一个Term组成。我想从中删除 [V] 并在其前后附加列表。你能告诉我该怎么做吗?

【问题讨论】:

  • 在您的term 结构中,LIST 定义在哪里? POINTER 在 LIST_HELP 结构中定义在哪里?
  • LIST_HELP 是一个链表。在术语中,args 是列表。它被定义为 LIST args。因此,术语被构造为符号及其参数。

标签: c linked-list structure


【解决方案1】:

可能是家庭作业;所以,假设你有一个列表LIST l1,你发现它是l1->cdr 的cdr。现在:要从列表中删除一个条目,您需要将 cdr 的 cdr 设置为当前的 cdr,如下所示:

l1->cdr = (l1->cdr)->cdr;

您有效地删除了之前在l1->cdr 中的条目。你还需要记住l1->cdr 之前的值,这样你就可以释放它使用的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2018-11-06
    • 2018-07-15
    相关资源
    最近更新 更多