循环遍历java递归引用

时间:2014-08-21 14:29:27

标签: java loops recursion linked-list

我正在编写一个简单的链表实现和相应的Trigger类,如下所示:

  public class Trigger {
    public static void main(String[] args) {
      LinkedList lin = new LinkedList();
      lin.add(3);
      lin.add(4);
      lin.add(5);
      lin.display();
    }
  }


 public class LinkedList {
      Item startItem;

      LinkedList() {
      startItem = new Item();
    }  

    public void add(Integer newValue) {
      if(startItem.value == null) {
        startItem.value = newValue;
        return;
      }

    Item tempItem = new Item();
    tempItem.value = newValue;

    while(startItem.next != null) {
     startItem = startItem.next;
    }

    startItem.next = tempItem;
   }

   public void display() {
     while(true) {
       System.out.println("\t"+ startItem.value);
       if(startItem.next == null) {
         break;
       } else {
         startItem = startItem.next;
       }  
     }
   }   

class Item {
 Integer value;
 Item next;

 Item() {
  this.value = null;
  this.next = null;
 }
}
}

问题是,只保留最后两个添加内容并丢弃之前的添加内容。这是(当然)因为我不断更改引用startItem指向的对象。我的问题是,给定这样的递归结构,什么是正确的循环机制?我知道在链表中,没有必要到列表的末尾来执行添加。链表结构用作上下文来询问循环结构的循环。感谢。

1 个答案:

答案 0 :(得分:2)

您的基本结构是正确的。您只需在开始循环之前添加一行...

  Item currentItem = startItem;
  while(currentItem.next != null) {
     currentItem = currentItem.next;
  }

首次检查字段startItem的唯一时间是第一次检查其值是否为null。它的引用永远不应该被改变,因为它应该总是指向结构的开始。考虑让它final强制执行此操作。