/*
* 作为自定义链表公共类
*/
public class Node<T> {
T value;
Node<T> pre;
Node<T> next;
public Node(T value){
this.value = value;
}
}
public class DeleteMiddle {
/**
* 删除链表中间节点
*/
public static void main(String[] args) {
Linked<Integer> linked = new Linked<>();
linked.addFirst(5);
linked.addFirst(4);
linked.addFirst(3);
linked.addFirst(2);
linked.addFirst(1);
Node<Integer> node = linked.deleteMiddle();
System.out.println(node.value);
Node<Integer> head = linked.head;
while(head!=null) {
System.out.print(",元素"+head.value);
head = head.next;
}
}
}
class Linked <T>{
Node<T> head;
public void addFirst(T value) {
Node<T> node = new Node<>(value);
if(head==null) {
head = node;
}else {
head.pre = node;
node.next = head;
head = node;
}
}
//删除指定节点
public Node<T> deleteNode(Node<T> node){
if(node == null) {
return null;
}
Node<T> preNode = node.pre;
Node<T> nextNode = node.next;
if(preNode == null && nextNode == null) {//只有一个元素
this.head = null;
return node;
}
if(preNode !=null && nextNode !=null) {
preNode.next = nextNode;
nextNode.pre = preNode;
}else if(preNode == null) {
nextNode.pre = null;
this.head = nextNode;
}else if(nextNode == null) {
preNode.next = null;
}
return node;
}
//删除中间节点
public Node<T> deleteMiddle() {
Node<T> curHead = head;
Node<T> tailHead = head;
while(curHead !=null && tailHead.next !=null) {
tailHead = tailHead.next.next;
if(tailHead == null) {//数量为偶数删除前面一个
break;
}
curHead = curHead.next;
}
return deleteNode(curHead);
}
}