zoukankan      html  css  js  c++  java
  • Leetcode 19. 删除链表的倒数第 N 个结点

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

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
    
    进阶:你能尝试使用一趟扫描实现吗?
     
    
    示例 1:
    输入:head = [1,2,3,4,5], n = 2
    输出:[1,2,3,5]
    
    示例 2:
    输入:head = [1], n = 1
    输出:[]
    
    示例 3:
    输入:head = [1,2], n = 1
    输出:[1]
     
    
    提示:
    链表中结点的数目为 sz
    1 <= sz <= 30
    0 <= Node.val <= 100
    1 <= n <= sz

    题解

    这道题目的考点在于如何一次扫描得到倒数第N个节点

    和如何删除当前节点( 包含 只有当前节点 没有前继节点)

    1 解决如何一次扫描得到倒数第N个节点

    使用间隔N个节点双指针,一同向前移动,右边的指针到达尾端,左边指针指向的节点就是倒数第N个节点。

    2 删除当前节点的办法(没有要删除指针的前继指针)是复制下一个节点的值 然后删除掉下一个指针

    代码

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            if (head->next == NULL) return NULL;
            
            ListNode* l = head;
            ListNode* r = head;
            ListNode* lPre = NULL;
            for (int i = 0; i < n; i++) {
                r = r->next;
            }
            
            while (r != NULL) {
                lPre = l;
                l = l->next; r = r->next;
            }
    
            if (l->next == NULL) {
                lPre->next = l->next;
            }
            else {
                l->val = l->next->val;
                l->next = l->next->next;
            }
    
            return head;
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    lua继承3
    C 调试
    lua继承
    hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
    网络摄像头监控
    hdoj_3336Count the string(KMP)
    逻辑思维训练500题(带答案)
    AC自动机算法
    poj_3080Blue Jeans && poj_3450Corporate Identity(KMP)
    hdoj_1162Eddy's picture(最小生成树)
  • 原文地址:https://www.cnblogs.com/itdef/p/14512925.html
Copyright © 2011-2022 走看看