如有问题欢迎提出交流!
看谁破我第一个赞吧!
咋们眼光要长远!点个赞以后我更加厉害了!!
不忘你老人家!!!!
温柔说出我的问题哦!!!谢谢啦
直接封装一个LinkList集合缩小版,不完美
/**
*
* @author 戴尔
*
*/
public class LinkList {
/**
*
* 创建一个节点内部类
*/
static class Node{
Node prev; //上一个节点
Node next; //下一个节点
Object elmenet; //完美的值
public Node(Object element){
this.elmenet = element;
}
public Node (Node prev,Node next,Object elmenet){
super();
this.prev=prev;
this.next=next;
this.elmenet=elmenet;
}
}
//没有下标 除了ArrayList
private Node first;//首节点
private Node last;//尾结点
private Node size; //有效数位
/**
* 添加一个元素
*
*/
public void add(Object obj){
Node node=new Node(obj);
if (first==null) {
first=node;
last=node;
}
else{
node.prev=last;
node.next=null;
last.next=node;//这里面的next是跟first和last操作的同一个地址
last=node;
}
}
}
package com.luo.demo;
public class text {
public static void main(String[] args) {
LinkList list=new LinkList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
System.out.println(list);
}
}
运行结果:
[a,b,c,d,e,f]
last.next=node;
这里面的next是跟first和last操作的同一个地址
详图讲解:
外部创建了一个节点对象,
里面是新节点,
图一:
图二:
以上可知:
图一:
外部创建了一个节点对象,
里面是新节点,我们给他了一个新的地址,0x111
first和last就都指向 这个外部节点
三个是同一个东西 first等于last等于node的这个新节点的
if (first==null) {
first=node;
last=node;
}
图二:
下面是分开解答的代码图像!希望您能认真阅读! 肯定能懂!!!!
else{
node.prev=last;
node.next=null;
last.next=node;
last=node;
}
第一次添加节点的时候
第二次插入节点的时候
node.prev=last;
把last 的地址传给第二个节点的prev,你就会发现第二个节点跟第一个还有最后一个节点的地址一样了!!!
也就是上面说的 first==last==node
如果还是没有明白,我们等下看第三个节点
node.next=null; 这不代码是什么都不动!!就等于null就行了,后面你会发现 是留着挂链条的!!!
连接前面节点的地址
last.next=node; 这步就是把最0x222给first 还有last的next
然后你就可以发现 第一个节点和第二个节点 挂链了!!双方就都挂链了
(这儿只是第一个和第二个有关系了!) 第二个节点是中介 跟二边都有关系,但是跟第一个最亲!!
第一个跟最后一个没有联系
.第一个跟最后一个联系往下看 last=node
last=node; 这儿的理解就是last的节点 整个都指向了 node 0x222的属性
node 就是目前的0x222节点(第二个节点)就相当copy了一份第二个节点给最后的last节点
(第二个节点完全覆盖last节点的东西,你可以理解last节点复制了第二个节点的东西)
也就是最后一个节点跟倒数第二个节点是一模一样了!
第三次插入节点的时候
node.prev=last; 把当前的last的地址给prev,你会发现跟第一个节点没有关系
跟第二个 和 最后一个节点有联系
node.next=null;这个还是不变
last.next=node;
last=node; last节点被第三个节点覆盖!!
最后的排版!!!下图!