2011-03-05 97 views
1

我想刪除列表並追加前端和後端列表並生成新列表。我有以下兩種結構:從鏈接列表中刪除和附加列表

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

在你的'term'結構中,LIST定義在哪裏? 'LIST_HELP'結構中定義了POINTER? – Davidann

+0

LIST_HELP是一個鏈表。在術語中,參數是list.It被定義爲LIST args.So一個術語被構造爲一個符號及其參數。 – thetna

回答

1

大概的家庭作業;所以,可以說你有一個清單LIST l1,你會發現它是由l1->cdr。現在:要刪除你想要做的是設置CDR的CDR作爲當前的CDR,像這樣什麼列表中的一個條目:

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

你有效地刪除先前在l1->cdr的條目。你還必須做的是記住以前的值l1->cdr,這樣你就可以釋放它所使用的內存。