我是编程新手,目前正在研究链表。我在网上的某个地方得到了这个代码。
public class Node
{
Node next;
int data;
public Node(int data)
{
this.data=data;
}
public class LinkedList
{
Node head;
public void delete(int data)
{
Node current=head;
while (current.next!=null)
{
if (current.next.data==data)
{
current.next= current.next.next;
}
}
}
}
}
我不明白的是为什么node.next
指向下一个节点?在 Node 类中,接下来是数据类型 Node。在 Node 类中没有下一个方法,但在LinkedList
类中,当调用current.next
时,它应该引用下一个节点。
在这里考虑代码 我在main方法中添加的每个节点都是类Node的一个对象,这个类包含Node next,它是对下一个节点的引用。例如,值为22
的第一个节点包含对值为2
的第二个节点的引用。例如,如果您只添加一个节点,则下一个节点将引用 null,因为没有第二个节点。在每个节点对象中,节点下一个引用为您提供下一个节点。但我强烈建议你阅读Java中的引用,因为你在这里错过了一个基本概念。
import java.util.Objects;
class LinkedList<T> {
private class Node<E> {
Node<E> next;
E val;
Node(E val) {
this.val = val;
}
}
private Node<T> head;
void add(T val) {
Node<T> node = new Node<>(val);
if (head == null) {
head = node;
} else {
Node<T> p = head;
while (p.next != null) {
p = p.next;
}
p.next = node;
}
}
void show() {
if (head == null)
return;
Node<T> p = Objects.requireNonNull(head);
while (p.next != null) {
System.out.print(p.val + " ");
p = p.next;
}
System.out.println(p.val);
}
}
class Main {
public static void main(String... args) {
LinkedList<Integer> ll = new LinkedList<>();
ll.add(22);
ll.add(2);
ll.add(4);
ll.add(32);
ll.add(3);
ll.add(1);
ll.add(44);
ll.show();
}
}
假设您有一个节点n
。Node 的类定义包含一个成员变量声明Node next;
这意味着类 Node 及其子类的每个实例都将有一个类型为Node
和名称next
的成员变量。因此,没有名为next
的方法。相反,它是一个正在访问的变量。这就是为什么语句current.next= current.next.next;
是合法的- 你不能写入函数调用的结果(通常(。但是,您可以写入成员变量(或从函数调用返回的 xyz 类实例的成员变量(。