//不带头节点的单链表
public class Link<T> {
private class Entry<E>{
private E value;
private Entry<E> next;
public Entry(E value){
this.value = value;
}
public E getValue() {
return value;
}
}
private Entry<T> headEntry;
private Entry<T> tailEntry;
public Link(){}
public void addHead(T value){
Entry<T> newEntry = new Entry<>(value);
if(headEntry == null){
headEntry = newEntry;
tailEntry = newEntry;
}else{
newEntry.next = headEntry;
headEntry = newEntry;//新头
}
}
public void addTail(T value){
Entry<T> newEntry = new Entry<>(value);
if(headEntry == null){
headEntry = newEntry;
tailEntry = newEntry;
}else{
tailEntry.next = newEntry;
tailEntry = newEntry;//更新新尾
}
}
public void deleteHead(){
if(headEntry == null){
return;
}
headEntry.value = null;
if(headEntry.next == null){
headEntry = null;
tailEntry = null;
}else {
Entry<T> p = headEntry;
headEntry = headEntry.next;
p.next = null;
}
}
/**
* 查找尾部的前驱
*/
private Entry<T> searchPrio(){
for(Entry<T> p = headEntry;p!=null;p=p.next){
if(p.next == tailEntry){
return p;
}
}
return null;
}
public void deleteTail(){
Entry<T> prio = searchPrio();
if(headEntry == null) {
System.out.println("单链表为空!");
return;
}
if(prio == null){
headEntry.value = null;
headEntry = null;
tailEntry = null;
} else {
prio.next = null;
tailEntry.value = null;
tailEntry = prio;
}
}
public void show() {
for(Entry<T> p = headEntry;p!=null;p=p.next){
System.out.print(p.value +" ");
}
System.out.println();
}
public Entry<T> getHeadEntry() {
return headEntry;
}
}
public class TestDemo {
public static void main(String[] args) {
Link<Integer> link = new Link<>();
// link.addHead(1);
// link.addHead(2);
// link.addHead(3);
// link.addTail(4);
// link.addTail(5);
// link.deleteHead();
// link.deleteHead();
// link.deleteHead();
// link.deleteTail();
// link.deleteTail();
// link.deleteTail();
link.show();
}
}