LinkedList说明:
1)LinkedList底层维护了一个双向链表。
2)LinkedList中维护了两个属性first和last分别指向首节点和尾结点
3)每个节点(Node)对象,里面又维护了prev、next、item三个属性,其中通过
prev指向前一个,通过next指向后一个节点。最终实现双向链表
4)所以LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高
/**
* @author 小黄debug on 2022/3/10
* @version 1.0
*/
public class LinkedList01 {
public static void main(String[] args) {
//模拟一个简单的双向链表
Node jack = new Node("jack");
Node tom = new Node("tom");
Node hsy = new Node("小黄");
//连接三个结点,形成双向链表
//jack -> tom -> hsy
jack.next = tom;
tom.next = hsy;
//hsy -> tom -> jack
hsy.pre = tom;
tom.pre = jack;
Node first = jack; //让first引用指向jack,就是双向链表的头结点
Node last = hsy; //让last引用指向hsp,就是双向链表的尾结点
//从头到尾进行遍历
while(true){
if(first == null){ //当first为空时,表示没有了
break;
}
//输出first信息
System.out.println(first);
first = first.next;
}
System.out.println("----------------------分隔线---------------------");
//从尾到头的遍历
while(true){
if(last == null){ //当first为空时,表示没有了
break;
}
//输出first信息
System.out.println(last);
last = last.pre;
}
//演示链表的添加对象/数据,是多久方便
//要求,在tom----小黄,直接插入一个对象smith
//1.先创建一个Node结点,name就是smith
Node smith = new Node("smith");
//下面就把smith加入到双向链表了
smith.next = hsy;
smith.pre = tom;
hsy.pre = smith;
tom.next = smith;
System.out.println("----------------------分隔线---------------------");
//让first 再次指向jack
first = jack; //让first引用指向jack,就是双向链表的头结点
//从头到尾进行遍历
while(true){
if(first == null){ //当first为空时,表示没有了
break;
}
//输出first信息
System.out.println(first);
first = first.next;
}
System.out.println("----------------------分隔线---------------------");
last = hsy;
//从尾到头的遍历
while(true){
if(last == null){ //当first为空时,表示没有了
break;
}
//输出first信息
System.out.println(last);
last = last.pre;
}
}
}
class Node{
public Object item; //真正存放数据
public Node next; //指向后一个节点
public Node pre; //指向前一个节点
public Node(Object name){
this.item = name;
}
public String toString(){
return "Node name = "+ item;
}
}