簡體   English   中英

java遞歸鏈表

[英]java recursive linked list

     private Node<T> recremoveFirst (Node<T> list, T element)
     {

 if (list == null)
     return null;
 else if(list.next == element)
     return list.next;
 else{
     list.next = recremoveFirst(list.next, element);
     return list;
 }

 }//calling recursive method
     public void removeFirst(T element) {

    recremoveFirst(head, element);

 }
 int choice;
Element elem;//constructor public Element (String name, int no)

LinkedList<Element> list = new LinkedList<Element>();

String name;
int number;
case 1 :  // addFirst
      System.out.print("Type name and number: ");
      name = Cin.readString();
      number = Cin.readInt();
      list.addFirst(new Element(name,number));
      break;
    case 2 :  // addLast
      System.out.println("Enter name and number to add last element: ");
      name = Cin.readString();
      number = Cin.readInt();
      list.addLast(new Element(name, number));
      break;

 case 3 :  // removeFirst

        list.removeFirst(elem);

當我嘗試測試此遞歸方法時,它在list.removeFirst(elem);附近顯示一個錯誤。 並且僅給出建議,即使已將其初始化(如果按initialize將其設置為null)。 所以我想知道我做錯了什么。 錯誤消息:此行有多個標記-本地變量elem可能尚未初始化-構造函數Element(Element)未定義

因為

Element elem;

在以下情況下可以為null

list.removeFirst(elem);

被執行。

所以會的

Element elem = null;

(您需要對其進行初始化才能使用它。)

無論如何,我很確定你想要這樣的東西:

list.addFirst(elem = new Element(name,number));

所以

list.removeFirst(elem);

將刪除最近添加的項目。

無論如何,您確定不想使用removeFirstOccurrence嗎? 因為removeFirst完全不同。

removeFirstOccurrence

刪除此列表中第一次出現的指定元素(當從頭到尾遍歷列表時)。 如果列表不包含該元素,則它保持不變。

無論如何,您收到此錯誤的原因與遞歸無關

編輯

好吧,您不需要對addFirst進行任何編輯,因為removeFirst會刪除列表中的第一項。 你只需要改變

removeFirst(elem);

removeFirst();

在這種情況下,如果您不在其他地方使用它,則不再需要elem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM