前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 删除链表的倒数第N个节点

LeetCode - 删除链表的倒数第N个节点

作者头像
晓痴
发布2019-07-24 11:57:18
4750
发布2019-07-24 11:57:18
举报
文章被收录于专栏:曌的晓痴

LeetCode第19题,中等难度,很经典的一道链表相关的题目。一个多月以前做的,当时一看就知道怎么写,结果代码总是差了点...

原题地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

题目描述

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

在根据自己写的代码写自己的解题思路时候,才发现这个题解居然是一遍扫描的。用两个指针,计算步差的方式,是最简单的。

  1. 新建两个指针,n1初始化为null,n2初始化为当前链表头
  2. 然后遍历指针n2,并计算n1和n2之间的步差,如果步差超过n就移动n1
  3. 最后n2遍历完,分为3种情况:
    1. 如果n1和n2不存在步差,直接返回null即可,根本就没有走...;
    2. 如果存在步差,但是n1还是null,也就是步差小于n,那么删除头结点...
    3. 存在步差,且n1不为null,说明存在倒数第n个节点,此时n1是倒数第n个节点的前一个节点,将n1.next指向倒数n-1个节点即可

中文官网题解:

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/

个人题解:

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
       ListNode n1 = null;
        ListNode n2 = head;
        int step = 0;
        while (n2.next != null) {
            n2 = n2.next;
            step++;
            if (step >= n) {
                if (n1 == null) {
                    n1 = head;
                } else {
                    n1 = n1.next;
                }
            }
        }
        if (step > 0) {
            if (n1 == null) {
                return head.next;
            } else {
                n1.next = n1.next.next;
            }
            return head;
        } else {
            return null;
        }
    }
}

结果:

虽然最后通过了这题,但是解答错误了4次(思路正确但是代码错误),最后的结果还不错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档