首先我们要知道,在Java中是没有指针的概念的
而Java虽然没有指针,但有着引用
利用引用一样可以制造链表
class Node{
Node next=null;//节点被创建的同时创建对象引用,但没申请对象空间
int data;
public Node(int n)data=n;
}
每一个结点都有一个对象引用,这使得链表在逻辑上是连续的,不用考虑物理顺序
通常情况下,链表有一个head,用来标识链表的起始位置,head并不作为链表的结点,head只是一个引用,head的引用对象是链表的第一个结点。
如:head.data==第一个结点.data;
我们接下来创建链表类,链表由结点构成
class LinkList{
Node head=null;//每个链表都有头结点
public void addNode(int e){
//给链表增加结点的方法,这里只示例尾部结点添加,其他插入也大同小异
Node n=new Node(e);
Node tmp=head;//head引用不能动,因为head标识链表的起始位置,申请一个tmp引用来进行操作
if(head==null){head=n;return;}//若链表为空,则直接添加在第一个结点
while(tmp.next!=null){
tmp=tmp.next;//将tmp引用向后移,一直移到最后一个结点
}
tmp.next=n;//在最后一个结点后添加新结点
}
public void delNode(int n){
//删除指定位置的结点,第一个结点是head指向的结点
Node pre=head;
if(n==1){head=head.next;return;}//
int num=2;
while(num<n){
pre=pre.next;//pre指向被删除的前一个结点
num++;
}
pre.next=pre.next.next;//删除结点
}
public void print(){//输出链表
Node tmp=head;
if(tmp==null){System.out.print("null");return;}
do{
System.out.print(tmp.data+" ");
tmp=tmp.next;}while(tmp.next!=null);
}
}
链表操作关键在于两处
1:head始终代表链表的起始位置
2:如果当前引用的结点为空,则空结点不能有下一个结点,否则会报错