[英]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節點...我該怎么辦? 非常感謝
繪圖始終有助於此類數據結構。 您目前所擁有的:
您可以使用以下命令正確設置t
的next
: t->set_next(n);
。 缺少的是它下面的箭頭,它是: n->set_prev(t)
。
一般來說,雙鏈表打交道時,調用set_next
應始終(大部分時間)伴隨着調用set_prev
上set_next
的說法。 這是因為雙鏈表的屬性:
x->next == y
意味着 y->prev == x
,而y->prev == x
意味着 x->next == y
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.