2016-03-25 2 views
1

У меня есть метод под названием «Найти», который, когда пользователь вводит значение элемента, получает адрес в новом узле, называемом * npt.Удаление узла с использованием адреса предыдущего узла

Использование * npt в качестве аргумента, я должен создать метод удаления, который удаляет значение после значения, сохраненного в npt.

Например, если это мой список: 134, 564, 674, 253, и я ввожу 674 для поиска, затем 253 удаляется.

В настоящее время, это мой код для функции удаления:

void LinkedList::Delete(Node *PrePosition){ 
Node *temp = PrePosition -> next; 
PrePosition->next = PrePosition->next->next; 
delete temp; 
} 

Проблема с этим, хотя, является то, что нет никакого способа, чтобы удалить узел головы в данный момент. Единственный намек, который мне дал, что на самом деле мне не очень помогает: PrePosition - NULL, если вы хотите удалить заголовок списка.

+0

Предположительно класс 'LinkedList' имеет' 'Node * указатель называется' head', который связывает голову списка. Поэтому, если вы получите «NULL» для своего аргумента, выполните один и тот же код с помощью указателя на голову. –

+0

Это, вероятно, звучит невероятно глупо с моей стороны, но метод Find требует int. Как можно установить аргумент NULL? – Bob

+0

@Bob Вы можете вернуть '-1', если ваш код позволяет это. –

ответ

0

Предполагая, что вам нужно сделать рекурсивную версию. Сделать условие для головы. В Находке:

Node* find(T value){ 
    if (head->value == value) 
     return nullptr; 
    return find(head->next); 

Сейчас в Delete:

void Delete(Node * pre) { 
    Node* temp; 
    if (pre == nullptr) { 
     temp = head; 
     head = head->next; 
    } else { 
     temp = pre->next; 
     pre->next = pre->next->next; 
    } 
    delete temp; 
} 
+0

Этот метод должен сделать так, чтобы любое значение, которое я помещал в который не является узлом, удаляет головку? Похоже, что он оставляет место для ошибок в случае опечаток. – Bob

+0

Если вы передадите nullptr, голова удаляется. Если вы не хотите, чтобы это было так, сделайте функцию удаления главы. Эта функция удаления должна быть закрытой, поэтому единственным человеком, который будет делать опечатку, является то, что вы ... – user2913685

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