二叉树高频题目
2026/1/9 1:33:38
publicListNoderemoveNthFromEnd(ListNodehead,intn){if(head==null||n<=0){returnhead;}// 虚拟头节点:解决删除头节点时无前驱的边界问题ListNodedummy=newListNode(-1);dummy.next=head;ListNodepre=dummy;ListNodefast=head;ListNodeslow=head;// 快指针先单独移动n步for(inti=0;i<n;i++){// 若fast已为null,说明n>链表长度,无节点可删,直接返回原链表if(fast==null){returndummy.next;}fast=fast.next;}// 快慢指针同步移动,直到快指针到链表末尾(fast=null)while(fast!=null){fast=fast.next;// 快指针先后移pre=slow;// 把pre更新为当前的slow(此时slow还没动,pre"记住"了slow现在的位置)slow=slow.next;// slow再后移(此时pre已经是slow移动后的上一个节点)}// 执行删除操作:让前驱节点的next跳过slow,指向slow的下一个节点pre.next=slow.next;// 返回新链表头returndummy.next;}