题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
package com.hhdd; /** * 给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针 * * @Author huanghedidi * @Date 2022/7/23 11:27 */ public class 删除链表的倒数第n个节点 { public static void main(String[] args) { ListNode listNode = new ListNode(1).setNext(2).setNext(3).setNext(4).setNext(5); ListNode res = removeNthFromEnd(listNode, 1); ListNode.print(res); } public static ListNode removeNthFromEnd(ListNode head, int n) { // write code here ListNode cur1 = head; ListNode cur2 = head; int i = 1; while (i <= n && cur1 != null) { cur1 = cur1.next; i++; } if (i <= n) { // 说明长度根本不够n return head; } if (cur1 == null) { // 说明删除的是头节点 return head.next; } // 记录删除节点的前节点 ListNode tmp1 = null; // 同时推进 找到倒数 n个 节点 while (cur1 != null) { if (cur1.next == null) { tmp1 = cur2; } cur1 = cur1.next; cur2 = cur2.next; } tmp1.next = cur2.next; cur2 = null; return head; } }