从链表中删除和追加列表

时间:2011-03-05 17:58:34

标签: c linked-list structure

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

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;

使用这两种结构,我有一个如下的术语:

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]并在其前后附加列表。你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:1)

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

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

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