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

删除链表的倒数第 n 个结点

  • 一、题目信息

剑指 Offer II 021. 删除链表的倒数第 n 个结点_第1张图片

一、题目信息

解题思路: 双指针,一个left,一个right。都把他们初始化到链表的头结点,先让right走n+1步,如果走完之后right为空了,直接返回head.next。接下来让left从head开始走,right继续走,直到right为空,这时left和right中间的就是需要删除的节点,让left.next=left.next.next即可。

图解
1、假设n=2,需要删除链表的倒数第二个节点,就是4这个节点。
剑指 Offer II 021. 删除链表的倒数第 n 个结点_第2张图片
2、先让right向前走n+1步

剑指 Offer II 021. 删除链表的倒数第 n 个结点_第3张图片
3、left和right一起走,直到right走到空为止
剑指 Offer II 021. 删除链表的倒数第 n 个结点_第4张图片
4、left.next=lefe.next.next;
剑指 Offer II 021. 删除链表的倒数第 n 个结点_第5张图片

实现代码

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode left = head;
        ListNode right = head;
        int count = 0;
        for (int i = 0; i < n; i++) {
            right = right.next;
        }
        if (right == null) {
            return head.next;
        }
        while (right.next != null) {
            left = left.next;
            right = right.next;
        }
        left.next = left.next.next;
        return head;
    }
}

其他题目分享

剑指 Offer 67. 把字符串转换成整数

怎么把i am a student逆置成student a am i?面试题逆置字符串讲解

三种方法任君挑选 LeetCode_136只出现一次的数字

什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解

剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会

二叉树的层序遍历原理+LeetCode真题练习

LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等

LeetCode 第二十一题

剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!

字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解

字符串bit666keji123“中数字的个数?

找到不重复的数字进阶版 空间复杂度O(1),时间O(n)平方,不能修改数组内容。不能对数组进行排序

LeetCode_231. 判断一个数是否为2 的幂,与运算一行代码解决

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和

你可能感兴趣的:(剑指Offer好题精选,链表,面试)