2017-02-19 96 views
0

我试图根据节点在双向链表中的位置来搜索节点。例如,如果列表包含1,2,3,4,5,并且我想获得位置3,它将返回位置数据,这是3.我能够获得第一和第二个位置,但是当我尝试任何第二个之后的其他位置,它只返回第二个位置。我不知道什么是错的。这是我到目前为止的代码:在给定的位置搜索节点双向链表

插入方法

public void insertAtStart(String data) 
    { 
     Node ptr = new Node(data); 
     if(head == null) 
     { 
      head = ptr; 
      tail = head; 
     } 
     else 
     { 
      head.prev = ptr; 
      ptr.next = head; 
      head = ptr; 
     } 
     size++; 
    } 

搜索方法

public Node searchAt(int pos) 
    { 
     Node found = head; 

     if(isEmpty()) 
     { 
      System.out.println("List is empty"); 
      return null; 
     } 

     if(pos == 1) 
      return found; 

     for(int i = 2; i <= size; i++) 
     { 
      if(i == pos) 
      { 
       found = head.next; 
      } 
     } 
     return found; 
    } 

测试:

 doc.insertAtStart("1"); 
     doc.insertAtStart("2"); 
     doc.insertAtStart("3"); 
     doc.insertAtStart("4"); 
     doc.insertAtStart("5"); 

     doc.printReverse(); 
     Node newNode = doc.searchAt(4); 
     System.out.println("Node" + newNode.data); 

输出:

1: 1 
2: 2 
3: 3 
4: 4 
5: 5 
Node: 2 
+0

我敢肯定它的工作完全一样编程。你的列表实际上是向后的(它被存储为5,4,3,2,1),所以访问位置4将返回2.如果你插入尾部而不是,你会有1,2,3,4, 5作为列表。或者,如果您反向或逆向输入数据,它会按预期结束。只是为了清楚,你可以使用searchAt()显示所有位置的值吗? – jszakmeister

回答

3

问题是在这一行:

found = head.next;

你总是返回第二个元素(和第一个作品感谢你if语句的第一个分支)。

您应该反过来浏览列表并获取正确的元素。

+1

谢谢,由于某种原因我无法弄清楚。所以我只是通过head = head.next来提高头节点; – bubbles2189

3

扭捏for循环了一下:

  • 移动在列表中的一个位置,到达位置时,每次迭代
  • 中断循环。

    for(int i = 2; i <= size; i++) 
    { 
        found = head.next; 
        if(i == pos) 
        { 
         break; 
        } 
    }