2015-10-07 4 views
0

У меня есть связанный список, и мне нужно вставить узел в том месте, где находится «итератор».Вставка узла в определенное место в Связанном списке C++

ниже функция вставки (который я шаблонный):

template <class T> 
    void List<T>::insert(T x) 
    { 
     if (size=0) 
     { 
      cout << "adding postion to head because empty list" << endl; 
      NodeRef newNode = new Node(x); 
     tail = head = newNode; 
     } 
    else 
    { 
     NodeRef temp = new Node(x); 
     temp->previous = iterator; 
     iterator->next = iterator; 
    } 
    } 

Ниже связанный класс список (который я также шаблонный):

 class List 
     { 

     private: 
     struct Node 
     { 
     T data; 
     Node* next; 
     Node* previous; 

      Node() : next(NULL), previous(NULL) {} //define our own default constuctor 
     Node(T data) : next(NULL), previous(NULL), data(data) {} 
     }; 

    typedef struct Node* NodeRef; 

    NodeRef head; 
    NodeRef tail; 
    NodeRef iterator; //points to one node at a time 
    NodeRef current1;//temp 
    int size; 
    public: 
    void insert(T);Inserts a new element into the list in the position after the "iterator" 
    void scroll() {iterator = iterator->next;} 

когда я вызвать функцию вставки , я сталкиваюсь с проблемами. функция прокрутки работает нормально.

ответ

0

iterator->next = iterator является неправильным и создает цикл. Так как предыдущая строка равна temp->previous = iterator, iterator->next должен указывать на темп. После того, как вы обновите обе ссылки, вы должны иметь n->next->prev == n для любого допустимого узла в списке.