剑指 Offer II 021. 删除链表的倒数第 n 个结点

Posted 易小顺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 021. 删除链表的倒数第 n 个结点相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

  给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。



说明

一、题目

  输入:head = [1,2,3,4,5], n = 2
  输出:[1,2,3,5]

二、分析

  • 先求取整个链表的长度,在进行 m - n 的遍历即可找到需要删除点的父节点,直接删除即可。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode hair = new ListNode(-1, head);
        if(head == null || head.next == null) return null;
        int len = 0;
        ListNode temp = head;
        while(temp != null) {
            len ++;
            temp = temp.next;
        }
        temp = hair;
        for(int i = 0; i < len - n; i++) {
            temp = temp.next;
        }
        temp.next = temp.next.next;
        return hair.next;
    }
}

总结

熟悉链表的遍历和节点的删除。

以上是关于剑指 Offer II 021. 删除链表的倒数第 n 个结点的主要内容,如果未能解决你的问题,请参考以下文章

Java 剑指offer(22) 链表中倒数第k个结点

剑指 Offer 22. 链表中倒数第k个节点

剑指offer链表题的双指针法总结

《剑指Offer》题目:链表中倒数第k个结点

剑指 Offer 22. 链表中倒数第k个节点

剑指Offer对答如流系列 - 链表中倒数第k个结点