私は多かれ少なかれ単一のリンクリストの背後にある基本的な考え方を理解していますが、二重にリンクされたリストに要素を挿入するのに問題があります。基本的に、前のポインタと次のポインタを適切なノードにリンクするのに問題があります。助けてくれてありがとう。これが私のコードの様子です。
LinkedList.h
template <class T>
class LinkedList{
protected:
LinkedListNode<T>* head;
public:
LinkedList():head(NULL){}
~LinkedList();
void insert(const T& x);
};
//inserting
template <class T>
void LinkedList<T>::insert(const T& x) {
LinkedListNode<T>* head = new LinkedListNode<T>(head->prev, x, head->next);
if(head != NULL){
head->prev = head->next;
head->next = head;
}
}
LinkedListNode.h
class LinkedListNode{
protected:
LinkedListNode<T>* prev;
T value;
LinkedListNode<T>* next;
LinkedListNode(LinkedListNode<T>* p, const T& x, LinkedListNode<T>* n):prev(p), value(x), next(n) {}
~doublyLinkedListNode();
template <class S> friend class doublyLinkedList;
};
挿入機能を次のように変更してみましたが、セグメンテーション違反が発生しました。私の実装の何が問題になっていますか?
template <class T>
void LinkedList<T>::insert(const T& x) {
LinkedListNode<T>* head;
if(head == NULL){
head->value = x;
head->prev = NULL;
head->next = head;
}
else{ LinkedListNode<T>* newnode;
newnode->value = x;
newnode->prev = head->next;
newnode->next = newnode;
head = newnode;
}