有兩種已知的方式(只有兩個?),刪除前鏈表刪除前鏈表
一種方法是遞歸函數效率低且會給堆棧溢出如果列表太大
的另一種方式(有效)是迭代並刪除節點這樣的功能:
class Forward_list { public: // Constructor... ~Forward_list() { if(head) destroy(); } void destroy() { node* prev = nullptr; while (head) { prev = head; head = head->next; delete prev; } } // functions... private: // data members... node* head; };
現在來談談做這種方式:
class Forward_list {
public:
// Constructor...
~Forward_list() { if(head) delete this->head; }
// functions...
private:
struct node {
~node() { delete this->next; } // <- this way
type data;
node* next;
};
node* head;
// data members...
};
我測試,它工作得很好......我覺得這種方式更清潔,但不知道是否會有副作用嗎?
如果您只想刪除一個節點,該怎麼辦? – PaulMcKenzie
@PaulMcKenzie:首先從列表中取消鏈接,它將'node-> next'設置爲'nullptr',使'delete this-> next'成爲無操作。 – MSalters