繁体   English   中英

为什么我不能打印链表中的最后一个元素

[英]Why can I not print the last element in my linkedlist

我已经实现了一个基本的链表,它包含一个 Node 类和一个 Linkedlist 类,Node 类是一个 java 泛型。

我只是想知道,为什么我的最后一个元素不打印,当我做一个打印语句时,这里是我的类

链表类

  /**
 * A linked list is a sequential list of nodes that hold data that point to nodes also containng data
 *
 * Linked lists are used in Lists, Queues and Stacks
 * Great for creating circular lists
 *
 * Head = first node in a linkedlist
 * Tail = last node in a linkedlist
 * Pointer = reference to the next node in a linkedlist.
 * Node = object containing data.
 */
public class Linkedlist<T> {
    Node Head;

    public Linkedlist(Node n)
    {
        Head = n;
    }

    public boolean contains(T obj)
    {

        Node n = Head;
        while (!(n.getNextNode().equals(null))){
            System.out.println(n.getNextNode());  //Last element does not print here
            n = n.getNextNode();
        }
        return false;
    }


}

节点类

 public class Node<T> {

    Node next = null;
    T data;


    public Node(T data){
        this.data = data;
    };

    public void setNext(Node n)
    {
        next = n;
    }

    public Node getNextNode()
    {
        return this.next;
    }

    public T getData()
    {return this.data;}

    public void printNode()
    {
        System.out.println(getData());
    }

}

感谢您的帮助,我正在使用 contains 方法检查我的 while 循环是否正在遍历所有元素。 (我认为是这样,但它只是停在最后一个元素而不是进一步)。

任何帮助将不胜感激

您必须重新考虑如何打印数据。 目前,您从不打印Head节点的数据,因为您只打印下一个节点( n.getNextNode() )。 当下一个元素为空时,您也会中断循环。 这会导致最后一个元素不被打印,因为getNextNode()将在 print 调用之前返回 null。

而是这样:

public boolean contains(T obj) {
    Node n = Head;
    do {
        System.out.println(n.getData()); // print data of current node
        n = n.getNextNode(); // move to next node
    } while (n != null); // break if we are behind next node. n is null
    return false;
}

或者如果您可能有一个空列表(传递给构造函数的节点为空):

public boolean contains(T obj) {
    Node n = Head;
    while (n != null) {
        System.out.println(n.getData());
        n = n.getNextNode();
    }
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM