簡體   English   中英

雙鏈表類

[英]Doubly linked list class

我正在嘗試制作一個雙鏈表。 函數push(int x)應該將一個節點添加到列表中並建立正確的鏈接。 我用:

class Node {
public:
    int value;
    Node* next;
    Node* prev;

public:
    Node() {}
    void set_value(int x) { value = x; }
    void set_next(Node* x) { next = x; }
    void set_prev(Node* x) { prev = x; }

    Node* get_next() { return next; }
    Node* get_prev() { return prev; }        
};

class deque {
    public:
        Node* head;
        Node* tail;
    public:
        deque() { head = NULL; tail = NULL; }
        void push(int x) {
             Node* n = new Node();
             n->set_value(x);
             n->set_next(NULL);
             n->set_prev(NULL);

             Node* t = head; //link to the next node           
             if (t == NULL) {
                 head = n; 
             } else {
                 while (t->get_next() != NULL) {
                       t = t->get_next();
                 }
                 t->set_next(n);
             }
        }     
};

正如我測試的那樣,將節點連接到下一個節點的部分工作正常,但是將節點連接到上一個節點時遇到了一些麻煩。 想到的是第一個的變體:

Node* t = tail;             
if (t == NULL) {
    tail = n; 
} else {
    while (t->get_prev() != NULL) {
          t = t->get_prev();
    }
    t->set_prev(n);
}

但是通過使用此方法,如果只有節點n是隊列中的唯一節點,則尾節點始終是當前n節點...我該怎么辦? 非常感謝

繪圖始終有助於此類數據結構。 您目前所擁有的:

在此處輸入圖片說明

您可以使用以下命令正確設置tnextt->set_next(n); 缺少的是它下面的箭頭,它是: n->set_prev(t)

一般來說,雙鏈表打交道時,調用set_next應始終(大部分時間)伴隨着調用set_prevset_next的說法。 這是因為雙鏈表的屬性:

x->next == y 意味着 y->prev == x ,而y->prev == x 意味着 x->next == y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM