题解 | #删除链表的倒数第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;
}
}

美团成长空间 2667人发布
