新しいスレッドを開始する必要があるかどうかはわかりませんが、前の質問を編集するとコードの再配置が大幅に増えるため、新しいスレッドが最適だと思います。
template <class T>
class node {
public:
T value;
node<T> *next;
node<T> *previous;
};
template <class T>
class my_list {
public:
node<T> *first;
node<T> *last;
my_list(){
first = NULL;
last = NULL;
}
~my_list(){
}
void push_back(T val);
void push_front(T val);
void pop_back();
void pop_front();
T front();
T back();
};
以上がクラス編成です。以下は、リストの最後のノードを削除する pop_back() メソッドです。私はそれを働かせることができません。実行されますが、T back() 関数を呼び出すとランダムな値が返されるため、最後のノードが再割り当てされないようです。
template <class T>
void my_list<T>::pop_back(){
node<T> oldlast = *this->last;
node<T> newlast = *oldlast.previous;
cout << newlast.value << endl;
newlast.next = NULL;
this->last = this->last->previous;
}
template <class T>
void my_list<T>::push_back(T val){
if (this->first == NULL) {
node<T> newnode;
newnode.value = val;
newnode.next = NULL;
newnode.previous = NULL;
this->first = &newnode;
this->last = &newnode;
} else {
node<T> current = *this->last;
node<T> newnode;
newnode.value = val;
newnode.previous = ¤t;
newnode.next = NULL;
current.next = &newnode;
this->last = &newnode;
}
}
template <class T>
void my_list<T>::push_front(T val){
if (this->first == NULL) {
node<T> newnode;
newnode.value = val;
newnode.next = NULL;
newnode.previous = NULL;
this->first = &newnode;
this->last = &newnode;
} else {
node<T> current = *this->first;
node<T> newnode;
newnode.value = val;
newnode.previous = NULL;
newnode.next = ¤t;
current.previous = &newnode;
this->first = &newnode;
}
}