删除链表中间元素

it2026-01-14  11

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

最新回复(0)