Удаление и добавление списка из связанного списка - PullRequest
1 голос
/ 05 марта 2011

Я хотел бы удалить список, добавить передний и внутренний список и сгенерировать новый список.У меня есть следующие две структуры:

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] из этого и добавить список до и после него.Подскажите, пожалуйста, как мне это сделать?

1 Ответ

1 голос
/ 05 марта 2011

Возможно домашнее задание;Итак, допустим, у вас есть список LIST l1, вы найдете его cdr на l1->cdr.Теперь: чтобы удалить одну запись из списка, вы должны установить cdr cdr как cdr текущего, например:

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

Вы фактически удалили запись, которая ранее была в l1->cdr.Вы также должны помнить, что предыдущее значение l1->cdr, чтобы вы могли освободить память, используемую им.

...