2014-02-26 89 views
0
void IntList::push_front(int value){ 
    IntNode *holder = new IntNode(value); 
    holder -> next = head; 
    head = holder; 
    if(head == 0){ 
     tail = head; 
    } 
    tail = holder; 
} 

頁眉尾巴指向最後一個節點?

#ifndef INTLIST_H 
#define INTLIST_H 

struct IntNode{ 
    int data; 
    IntNode *next; 
    IntNode(int data) : data(data), next(0) {} 
}; 

class IntList{ 
private: 
    IntNode *head; 
    IntNode *tail; 
public: 
    void push_front(int value); 
}; 

#endif 

我如何在最後的尾節點獲得尾巴呢?我有if語句,所以如果列表爲空,它將被設置爲0。上述

回答

0
head = holder; 
if(head == 0){ 
    tail = head; 
} 

的步驟順序錯誤:你設置的頭架(這將永遠是0,因爲如果內存分配失敗,你會得到一個異常,如果它的工作,你會得到一個指向分配節點),然後測試,如果頭部不等於0

你可以只扭轉他們的訂單,但恕我直言這是將清潔劑直接反正測試尾巴:

head = holder; 
if (tail == nullptr) 
    tail = head; 

在預C++ 11個你可能沒有的編譯器nullptr - 只需使用NULL或0或更改爲if (!tail)

相關問題