我想删除一个列表并附加前端和后端列表并生成一个新列表。我有以下两种结构:
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]
并在其前后附加列表。你能告诉我怎么做吗?
答案 0 :(得分:1)
可能是家庭作业;所以,假设你有一个列表LIST l1
,你会发现它是l1->cdr
的cdr。现在:要从列表中删除一个条目,你想要做的是将cdr的cdr设置为当前的cdr,如下所示:
l1->cdr = (l1->cdr)->cdr;
您有效删除了以前l1->cdr
中的条目。你还要做的就是记住以前的l1->cdr
值,这样你就可以释放它所使用的内存。