package com;
/**
- 双向链表
*/
public class DoubleLinkList {
//初始化
private Note head = null;
private Note tail = null;
private int size = 0;
public int getSize() {
return size;
}
public Note getHead() {
return head;
}
public Note getTail() {
return tail;
}
//尾添加
public <E> void addEndNote(E item) {
Note note = new Note(item);
if (size == 0){
head = note;
tail = note;
head.next = null;
tail.prev = null;
size++;
}else {
note.prev = tail;
tail.next = note;
tail = note;
size++;
}
}
//尾删
public void tailDelete(){
if(tail == null){
return;
}
if (tail.prev != null){
tail = tail.prev;
tail.next = null;
}else {
head = null;
tail = null;
}
}
//头添加
public <E> void addHeadNote(E item) {
Note note = new Note(item);
if (size == 0){
head = note;
tail = note;
head.next = null;
tail.prev = null;
size++;
}else {
head.prev = note;
note.next = head;
head = note;
size++;
}
}
//头删
public void headDelete(){
if(head == null){
return;
}
if (head.next != null){
head = head.next;
head.prev = null;
}else {
head = null;
tail = null;
}
}
//反转
public void linkReversal(){
Note note1 = null;
tail = head;
Note note = tail;
while (note != null){
note1 = note.prev;
note.prev = note.next;
note.next = note1;
note = note.prev;
}
if (note1 != null){
head = note1.prev;
head.next = note1;
}
}
//删除第一个item
public <E> boolean deleteItems(E item) {
if (size == 0) {
System.out.println("链表为空");
return false;
}else if (head == item){
headDelete();
return true;
}
Note note = head.next;
while (note != null){
if (note.item == item){
note.prev.next = note.next;
note.next.prev = note.prev;
return true;
}
note = note.next;
}
return false;
}
//两个链表合并
public void addLinkList(DoubleLinkList LinkList){
Note note = tail;
if(head == null){
head = LinkList.head;
}else if (LinkList.head == null){
return;
}else {
LinkList.head.prev = note;
note.next = LinkList.head;
tail = LinkList.tail;
}
}
//输出链表
public void printNode() {
Note temp;
for (temp = this.head; temp.next != null; temp = temp.next) {
System.out.print(temp.item + "->");
}
System.out.println(temp.item);
}
}