2013-05-31 6 views
0

Я не уверен, что это правильный способ создания метода удаления для моего кругового списка, также у меня возникла проблема с его работой для 1 списка узлов.Циркулярный список Удаление узла

public void remove() { 
    if(first.getNext() == null) { 
     first = null; 
     first.setNext(null); 
    } else { 
     Node current = first; 
     for(int i = 0; i < getSize() - 1; i++) { 
      current = current.getNext(); 
     } 
     first = first.getNext(); 
     current.setNext(first); 
     size--; 
    } 
} 

У меня он работает должным образом для списков, которые больше, чем два, но я не уверен, что это был лучший способ для решения этой проблемы. Есть ли у кого-нибудь предложения по улучшению этого способа, а также к тому, чтобы один список узлов был удален правильно? Несмотря на то, что я установил первый узел в значение null, а следующий узел - нулевым, он все равно возвращает мой исходный вход.

EDIT: Для тех, кто смотрит на это в будущем, я просто распечатал сообщение о том, что вы не можете удалить элемент. Поскольку мое задание было довольно неоднозначным, что с ним делать.

+0

вы можете добавить больше деталей или код ! Что такое getSize? если его общий список элементов, вы можете напрямую проверить getsize() == 1. как вы извлекаете данные? – Dineshkumar

+0

getSize() возвращает размер кругового списка, getData() возвращает целое число, которое хранится в узле, getNext() возвращает узел, который указывает текущий. – user123

ответ

1

Это не может работать. Я думаю, он не получает, чтобы выполнить часть происходит некорректно вообще:

first = null; 
    first.setNext(null); 

причина, почему я sthat это подняло бы на NullPointerException. Сначала вы установили first в значение null и попробуйте разыменовать null.

Я не предоставит вам точный код (как это своего рода домашнее задание права;)), но проверить этот псевдо код из википедии (http://en.wikipedia.org/wiki/Doubly_linked_list):

function remove(List list, Node node) 
    if node.prev == null 
     list.firstNode := node.next 
    else 
     node.prev.next := node.next 
    if node.next == null 
     list.lastNode := node.prev 
    else 
     node.next.prev := node.prev 
    destroy node 
+0

Да, это для упражнений, мне дали код и вам нужно создать функцию удаления, которая не принимает никаких параметров, и мне не разрешено изменять какой-либо существующий код. – user123

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