/* * 作为自定义链表公共类 */ 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); } }
