[英]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.