2017-02-18 18 views
0

Используя Java, у меня есть связанный класс LList и класс LLNode. Я пытаюсь удалить элемент из моего Linked List, возвращая новый связанный список без элемента. В принципе, если в списке нет конкретного элемента, верните его, но если он создает новый. Я повторяю свой текущий список, чтобы увидеть, содержит ли он элемент e, а не точно, как создать список без этого конкретного элемента.Связанный список, удаляем элемент, возвращая новый список

public LList<T> remove(T t) { 
    if (this.contains(t)) { 
     LList<T> newList = new LLSet<>(this.head); 
     newList.head = new LLNode<>(, this.head); 

     return newList; 
     } 

     return this; 
     } 

ответ

0

Я предполагаю, что LList и LLNodes являются вашими собственными классами. Мой первый вопрос: почему вы хотите вернуть новый список, если вы можете удалить элемент из того же списка и вернуть его? То, что вы должны сделать, это . Поскольку связанный список связан с узлами, возможно, вы должны 1. Перемещайте список один за другим 2. и удалите элемент, переданный в методе.

Но если вы действительно хотите достичь этого, вернув новый список. Ниже то, что вы должны сделать, 1. Создать новый список 2. Итерация более старшем списка и заполнить новый список с элементами из старого списка 3. Пропустите элемент, который вы хотите удалить в цикле

Мое предложение, не создавайте новый список, а изменяйте существующее. В этом преимущество LinkedList.

0

Вам нужно построить новый список с новыми узлами. Если вы попытаетесь разделить узлы, вы внесете изменения в оба списка.

Я думаю, что простой while цикл может быть использован для создания нового списка:

public LList<T> remove(T t) { 
    LList<T> newList = new LList<>(); 
    LLNode<T> current = this.head; 
    while (current != null) { 
     if (!current.element.equals(t)) { 
      newList.add(t) 
     } 
    } 
    return newList; 
} 

Если это на самом деле функциональность вы хотите, и у вас есть свобода, чтобы изменить имя методы, я бы рекомендовал вызов это without(T t). Большинство людей ожидали бы remove(T t), чтобы изменить список, на который он был вызван.

0

Предполагая, что ваш метод удаления находится в классе LList. Попробуйте следующее:

public LList<T> remove(T t) { 

    LLNode curr = this.head; 
    LLNode prev = null; 

    while(curr != null) { 

     if (curr.equals(T)) { 
      prev.setNext(curr.next()); 
      return this.head; 
     } 

     prev = curr; 
     curr = curr.next(); 
    } 

    return this.head; 
}