public class LinkedTable<T> {
//双向链表
//节点内部类,包含前一个节点prev、后一个节点next、节点值value
private class Node{
Node prev;
Node next;
T value;
private Node(){}
private Node(T value){
this.value = value;
}
}
private Node head; //虚拟头节点
private Node tail; //虚拟尾节点
private Integer size; //链表大小
//初始化
public LinkedTable(){
head = new Node();
tail = new Node();
head.next = tail;
tail.prev = head;
size = 0;
}
public boolean insert(Integer index,T element){
if(index < 0)
return false;
if(index > size)
return false;
Node current = head;
for(int i = 0; i <= index; i++){
current = current.next;
}
Node newNode = new Node(element);
current.prev.next = newNode;
newNode.prev = current.prev;
current.prev = newNode;
newNode.next = current;
size++;
return true;
}
public boolean insertAtFirst(T element){
return insert(0,element);
}
public boolean insertAtLast(T elements){
return insert(size,elements);
}
public boolean delete(Integer index){
if(index < 0)
return false;
if(index >= size)
return false;
Node current = head;
for(int i = 0; i <= index; i++)
current = current.next;
current.prev.next = current.next;
current.next.prev = current.prev;
size--;
return true;
}
public boolean deleteAtFirst(){
return delete(0);
}
public boolean deleteAtLast(){
return delete(size-1);
}
public T get(Integer index){
if(index < 0 || index >= size)
return null;
Node current = head;
for(int i = 0; i <= index; i++)
current = current.next;
return current.value;
}
public T getFirst(){
return get(0);
}
public T getLast(){
return get(size-1);
}
public String toString(){
Node current = head;
StringBuffer sb = new StringBuffer();
for(int i = 0; i < size; i++){
current = current.next;
sb.append(current.value.toString());
}
return sb.toString();
}
public static void main(String[] args) {
LinkedTable<String> linkedTable = new LinkedTable<>();
System.out.println(linkedTable.get(0)); //null
linkedTable.insert(0,"A");
linkedTable.insertAtFirst("B");
linkedTable.insertAtLast("C");
System.out.println(linkedTable); //BAC
System.out.println(linkedTable.getFirst());//B
System.out.println(linkedTable.getLast());//C
System.out.println(linkedTable.get(1));//A
System.out.println(linkedTable.deleteAtLast()); //true
System.out.println(linkedTable); //BA
System.out.println(linkedTable.delete(1)); //true
System.out.println(linkedTable); //B
System.out.println(linkedTable.deleteAtLast()); //true
System.out.println(linkedTable); //
}
}
双向链表实现
最新推荐文章于 2024-08-12 16:47:32 发布