遍历链表Java的实现

遍历链表Java的实现,java,list,linked-list,nodes,Java,List,Linked List,Nodes,所以我读了几篇关于这个主题的文章,但它们都提到了通过已经由Java实现的链表进行迭代;例如,LinkedList=newLinkedList()。然后继续说,使用for循环遍历链表。然而,我正在尝试实现我自己的链表,我不知道如何遍历它们。换句话说,我有以下代码: class Node { private Node next = null; private int data; public Node(int d) { data = d; }

所以我读了几篇关于这个主题的文章,但它们都提到了通过已经由Java实现的链表进行迭代;例如,
LinkedList=newLinkedList()。然后继续说,使用for循环遍历链表。然而,我正在尝试实现我自己的链表,我不知道如何遍历它们。换句话说,我有以下代码:

class Node {
    private Node next = null; 
    private int data; 

    public Node(int d) {
        data = d; 
    }

    void appendToTail(int d) {
        Node end = new Node(d); 
        Node n = this; 
        while(n.next != null) {
            n = n.next; 
        }
        n.next = end; 
    }

    void print() {
        Node n = this; 
        while(n.next != null) {
            System.out.println(n); 
            n = n.next; 
        }
    }

    public static void main(String [] args) {
        Node x = new Node(4); 
        x.appendToTail(5); 
        x.print(); 
    }   
}
我编写的
print()
函数是我尝试遍历链表的努力。但是,它不起作用。有没有人知道如何在链表中迭代,只要你自己实现了链表?

Change

while(n.next != null) 

因为在循环内部,您正在打印当前节点
n
,然后通过以下方式将其指向下一个节点:
n=n.next

更改

while(n.next != null) 


因为在循环内部,您正在打印当前节点
n
,然后通过以下方式将其指向下一个节点:
n=n.next

您应该检查当前节点是否为空,而不是下一个节点。因为这样会错过列表的最后一个节点,
next
部分将为最后一个节点的
null
,循环将不会执行

您需要打印节点的部分数据。您尚未为节点类定义
toString
方法

void print() {
  Node n = this;
  while(n != null) {
    System.out.println(n.data);
    n = n.next;
  }
}
您可以如下为您的
节点
类定义
toString
,然后您可以在
System.out
语句中直接打印
节点
对象

@Override
public String toString() {
  return "Node{" +
      ", data=" + data +
      '}';
}

您应该检查当前节点是否为空,而不是下一个节点。因为这样会错过列表的最后一个节点,
next
部分将为最后一个节点的
null
,循环将不会执行

您需要打印节点的部分数据。您尚未为节点类定义
toString
方法

void print() {
  Node n = this;
  while(n != null) {
    System.out.println(n.data);
    n = n.next;
  }
}
您可以如下为您的
节点
类定义
toString
,然后您可以在
System.out
语句中直接打印
节点
对象

@Override
public String toString() {
  return "Node{" +
      ", data=" + data +
      '}';
}

您应该检查
n
是否为空,而不是
n。next()
::

但是您拥有
for
循环的所有方面(初始状态、终止条件和迭代表达式),因此这可以更好地表示为
for
循环:

for (Node n = this; n != null; n = n.next)
    System.out.println(n.data);

您应该检查
n
是否为空,而不是
n。next()
::

但是您拥有
for
循环的所有方面(初始状态、终止条件和迭代表达式),因此这可以更好地表示为
for
循环:

for (Node n = this; n != null; n = n.next)
    System.out.println(n.data);

但是,它不工作,但是,它不工作,谢谢你!我只需要确保我做了
System.out.println(n.data)
。是的,你应该打印
node.data
,欢迎你。谢谢!我只需要确保我做了
System.out.println(n.data)
。是的,您应该打印
node.data
,我们欢迎您。