自定义一个链表,体会底层原理
基础结构
public class JtLinkedList01 {
private Node first;
private Node last;
private int size;
//[]
//["a","b","c"]
public void add(Object object){
Node node = new Node(object);
if (first==null){
// node.previous =null;
// node.next = null;
first = node;
last = node;
}else {
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node temp = first;
while (temp!=null){
stringBuilder.append(temp.element+",");
temp = temp.next;
}
stringBuilder.setCharAt(stringBuilder.length()-1,']');
return stringBuilder.toString();
}
public static void main(String[] args) {
JtLinkedList01 jtLinkedList01 = new JtLinkedList01();
jtLinkedList01.add("a");
jtLinkedList01.add("b");
jtLinkedList01.add("c");
jtLinkedList01.add("c");
jtLinkedList01.add("c");
jtLinkedList01.add("c");
System.out.println(jtLinkedList01);
}
}
增加get方法
public class JtLinkedList02 {
private Node first;
private Node last;
private int size;
public Object get(int index){
if (index <0||index>size-1){
throw new RuntimeException("索引数字不合法"+index);
}
Node temp = null;
if (index<=(size>>1)){ //size>>1相当于除以2
temp = first;
for (int i = 0;i<index;i++){
temp = temp.next;
}
}else {
temp = last;
for (int i = size-1;i >index;i-- ){
temp = temp.previous;
}
}
return temp.element;
}
//[]
//["a","b","c"]
public void add(Object object){
Node node = new Node(object);
if (first==null){
// node.previous =null;
// node.next = null;
first = node;
last = node;
}else {
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
size++;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node temp = first;
while (temp!=null){
stringBuilder.append(temp.element+",");
temp = temp.next;
}
stringBuilder.setCharAt(stringBuilder.length()-1,']');
return stringBuilder.toString();
}
public static void main(String[] args) {
JtLinkedList02 jtLinkedList02 = new JtLinkedList02();