我或多或少落后单链表的基本理念,但与在双向链表插入元素的麻烦。 基本上我无法链接prev指针和下一个指针到适当的节点。 在此先感谢您的帮助。这是我的代码的样子。插入在双向链表元素
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;
}
首先,在带箭头的纸上做指针。其次,当你有['std :: list'](http://en.cppreference.com/w/cpp/container/list)时不要创建你自己的列表。 –
@JoachimPileborg小点:创建自己的列表非常棒。你不应该使用它(除了测试它)。 – delnan
在你最新的'insert'代码中,当已经有一个成员变量'head'时,你声明一个局部变量'head'。后来,当你说'head'时,编译器无法猜出你的意思(或者说,它猜错了)。 – Beta