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)附近显示错误; 并且只给出建议初始化它,即使它被初始化(如果按初始化将其设置为null)。所以我想知道我做错了什么。 错误消息:此行有多个标记 - 局部变量elem可能不存在 初始化 - 构造函数Element(Element)是 未定义
答案 0 :(得分:1)
因为
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
。