彻底理解java链表中的节点Node
链表(linked list),对应java中的LinkedList类型(基于双向链表实现)。
在c/cpp中通过"结构体+指针"实现,但是java中没有指针,所以要使用类来实现。
我们先来看cpp中的Node实现:可以发现,next中存放的是下一个Node对象的地址。
struct Node
{
/* data */
int val;
struct Node* next;
//next是结构体指针类型,存放的是下一个node的地址
};
我们再来看java中node的实现:
public class Node {
int data;
Node next;
//注意这里的next是Node类型
public Node(int data)
{
this.data=data;
this.next=null;
}
}
乍一看,next是Node类型,那么它到底存储的是什么值呢?难道是下一个对象本身?
答案:next存放的,也是下一个Node对象的地址
代码验证:
public class Main {
public static void main(String[] args) {
Node node1 = new Node(11);
Node node2 = new Node(22);
Node node3 = new Node(33);
System.out.println("node1="+node1);
System.out.println("node2="+node2);
System.out.println("node3="+node3);
node1.next=node2;
node2.next=node3;
System.out.println("node1.next="+node1.next);
System.out.println("node2.next="+node2.next);
}
}
输出:
node1=org.example.Node@566776ad
node2=org.example.Node@6108b2d7
node3=org.example.Node@1554909b
node1.next=org.example.Node@6108b2d7
node2.next=org.example.Node@1554909b