题解 | #删除链表的倒数第n个节点#

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

http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

C++版本-将就看看吧~~

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // write code here
        //如果当前节点后的第1、2...节点存在,第n个不存在,那当前节点就是要删除的
        //问题是:不可能每次移动一个,就判断一次
        //法1:直接遍历一次,得出总长度len,再从头开始找到倒数的第n个删除,O(n),
        //法2:快指针先走n步,然后同时走,快指针为空)的时候,慢指针刚好到要删除的节点O(n)
        //注意删除头节点或者尾节点的情况
        //由于没有指明是双向链表,保存一下slow的前一个节点
        ListNode* tmp= new ListNode(-1);
        tmp->next=head;//加个伪节点在之前
        auto fast=head;
        auto slow=head;
        while(n){
            fast=fast->next;
            n--;
        }
        //如果快指针这个时候没有为空,就可以继续
        while(fast){
            fast=fast->next;
            slow=slow->next;
            tmp=tmp->next;
        }
        //如果为空跳出while,判断下slow是否是首节点
        if(slow==head) 
            return head->next;
        //如果是尾节点
        if(slow->next==nullptr){
            tmp->next=nullptr;
        }else{
            tmp->next=slow->next;
        }
       return head;

    }
};
全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务