2017-02-18 100 views
0

使用Java,我有一個鏈接的LList類和一個LLNode類。我試圖從我的鏈接列表中刪除一個元素,通過返回一個沒有元素的新鏈接列表。基本上,如果列表不包含特定的元素,那麼返回它,但如果它確實創建一個新的。我遍歷我的當前列表,看看它是否包含元素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.元素的新list跳過要在循環要刪除的元素

我的建議,不要創建新的列表,但修改現有的。這是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; 
} 

如果這種情況真的是你想要的功能,你有自由更改方法的名稱,我會建議打電話它​​。大多數人會希望remove(T t)修改它被調用的列表。

0

假設您的remove方法在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; 
}