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

    题意

    删除链表的倒数第(n)个结点,返回链表的头结点。

    思路

    • 想法1:一趟扫描确定表长,第二趟删除第len - n个元素。时间复杂度:(O(n))
    • 想法2:题目中问能否尝试使用一次扫描实现,思考一下。用两个指针就可以了,当前面的指针指向第(n)个元素时,后面的指针开始移动,这样他俩之间始终差(n)个元素,前面的指针指向最后的位置时,后面的指针正好指向倒数第(n)个元素。

    代码

    • 代码1:
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
    
            int len = 0;
            ListNode *t = head;
            while(t != NULL)    { ++len; t = t -> next; }
    
            ListNode res(0);
            res.next = head;
            t = &res;
    
            for(int i = 0; i < len - n; ++i)
                t = t -> next;
    
            t -> next = t -> next -> next;
            return res.next;
        }
    };
    
    • 代码2:
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
    
            ListNode res(0);
            res.next = head;
            ListNode *fast = &res, *slow = &res;
    
            while(fast -> next)
            {
                if(n)
                    --n;
                else
                    slow = slow -> next;
                fast = fast -> next;
            }
    
            slow -> next = slow -> next -> next;
            return res.next;
        }
    };
    

    总结

    好多“思维”题都要用到双指针的思想呢。

  • 相关阅读:
    JS实战 · 表单验证
    JS实战 · 仿css样式选择器
    JS实战 ·  收缩菜单表单布局
    cookie自动登录的实现
    redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动
    yum问题解决
    配置yum镜像源
    shell笔记
    CCIE总结:路由器、交换机
    云主机如何挂在磁盘
  • 原文地址:https://www.cnblogs.com/songjy11611/p/12332913.html
Copyright © 2011-2022 走看看