2014-11-19 4 views
-1

Я хочу создать linkedList из Arraylist. Я использую новый curNode и даю значение, но когда я хочу его удалить после использования, это неправильно. почему я не могу удалить curNode?Почему я не могу удалить узел Linkedlist?

struct ListNode { 
    int val; 
    ListNode *next; 
    ListNode(int x) : val(x), next(NULL) {} 
}; 

ListNode *addListNode(int* arr,int n){ 
    ListNode *head=NULL,*curNode,*tail; 
    for(int index=0;index!=n;++index){ 
     curNode = new ListNode(arr[index]); 
     if (head==NULL) 
      head=curNode; 
     else 
      tail->next=curNode; 
     tail = curNode; 
     //delete curNode; 
    } 
    return head; 
} 
+1

Что вы имеете в виду, это неправильно? Что происходит? –

+0

Выполняя удаление, вы удаляете только что созданный узел (освободите память под указателем curNode, так и под заголовком/хвостом). Вы можете удалить узел, когда вы удалите его из списка. – prajmus

+0

ваш удаляющий узел в java вы можете пойти с итератором и удалить итератор –

ответ

0

На самом деле вы назначая указатели не значения: head=curNode;, tail->next=curNode;, tail = curNode;. Поэтому вы не должны удалять тот же указатель, что и освобождать память, на которую указывают ваши новые созданные элементы ListNode.

Вы должны удалить выделенную память после использования возвращаемого ListNode или лучше в деструкторе ListNode. Также рассмотрите использование интеллектуальных указателей (например, std::unique_ptr<ListNode>), чтобы убедиться, что выделенная память будет автоматически освобождена, когда она больше не будет использоваться.

Смежные вопросы