package com.project.common.core.absclasses;
|
|
|
import com.project.common.utils.StringUtils;
|
import lombok.Data;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
|
@Data
|
public class BaseLink<T> {
|
|
private BaseLinkNode<T> head;
|
|
|
public void add(T t)
|
{
|
if (StringUtils.isNull(head)){
|
head = new BaseLinkNode<>();
|
head.setData(t);
|
} else {
|
BaseLinkNode<T> last = getLast(head);
|
BaseLinkNode<T> newLast = new BaseLinkNode<>();
|
newLast.setData(t);
|
newLast.setPre(last);
|
|
last.setSuf(newLast);
|
}
|
}
|
|
|
public BaseLinkNode<T> getAndRemoveByHead(BaseLink<T> link)
|
{
|
BaseLinkNode<T> node = link.head;
|
|
BaseLinkNode<T> suf = node.getSuf();
|
suf.setPre(null);
|
head = suf;
|
|
return node;
|
}
|
|
|
public BaseLinkNode<T> getAndRemoveByLast(BaseLink<T> link)
|
{
|
BaseLinkNode<T> last = getLast(link.head);
|
|
BaseLinkNode<T> newLast = last.getPre();
|
newLast.setSuf(null);
|
|
newLast.setPre(last.getPre());
|
|
return last;
|
}
|
|
private BaseLinkNode<T> getLast(BaseLinkNode<T> link)
|
{
|
if (!link.getHasSuf()){
|
return link;
|
}
|
return getLast(link.getSuf());
|
}
|
|
private BaseLinkNode<T> getHead(BaseLinkNode<T> link)
|
{
|
if (!link.getHasPre()){
|
return link;
|
}
|
return getHead(link.getPre());
|
}
|
|
private List<BaseLinkNode<T>> getAllNodeByHead(BaseLink<T> link)
|
{
|
if (StringUtils.isNull(link.head)){
|
return null;
|
}
|
ArrayList<BaseLinkNode<T>> ts = new ArrayList<>();
|
BaseLinkNode<T> current = link.head;
|
|
while (true){
|
ts.add(current);
|
if (current.getHasSuf()){
|
current = current.getSuf();
|
} else {
|
break;
|
}
|
}
|
return ts;
|
}
|
|
private List<BaseLinkNode<T>> getAllNodeByLast(BaseLink<T> link)
|
{
|
if (StringUtils.isNull(link.head)){
|
return null;
|
}
|
BaseLinkNode<T> current = getLast(link.head);
|
ArrayList<BaseLinkNode<T>> ts = new ArrayList<>();
|
|
while (true){
|
ts.add(current);
|
if (current.getHasPre()){
|
current = current.getPre();
|
} else {
|
break;
|
}
|
}
|
return ts;
|
}
|
|
|
|
|
}
|