java递归链表

时间:2014-03-08 17:01:55

标签: java recursion

     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)是      未定义

1 个答案:

答案 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