先定义一个节点Node:
public class Node {
Node previous; //上一个节点
Node next; //下一个节点
Object element; //元素数据
public Node(Node previous, Node next, Object element) {
super();
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element) {
super();
this.element = element;
}
}
LinkedList实现:
package Study.Collection;
/**
* <p>Description: </p>
* 结点概念,add()方法
* @author zhangyan
* @date 2018/12/19 21:24
*/
public class YanLinkedList {
private Node first; //第一个结点
private Node last; //最后一个结点
private int size; //容量
public void add(Object obj) {
//新建一个node对象,调用Node
Node node = new Node(obj);
//第一次存东西,第一个结点和最后一个结点都是node
if(first==null){
first = node;
last = node;
} else {
node.previous = last; //最后一个结点赋值node的前继结点
node.next = null; //node的后继结点为null
last.next = node; //指针移动
last = node;
}
}
//重写toString()方法
public String toString() {
//[a,b,c] first=a, last=c
// //a,b,c
StringBuilder sb = new StringBuilder("[");
Node temp = first;
while(temp!=null){
sb.append(temp.element+",");
temp = temp.next;
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
//测试
public static void main(String[] args) {
YanLinkedList list = new YanLinkedList();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
}
}
解析:思路很简单,先定义节点,然后在YanLinkedList中调用。LinkedList中最核心的是add()方法。
add()方法的内容是新建一个node对象调用Node节点,首先判断头节点是否为空
1,头节点为空,把node对象赋值给YanLinkedList的第一个节点和最后一个节点;
2,头节点不为空,通过指针移动在YanLinkedList链表后添加节点node。
具体方法实现请看代码和注释