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

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

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

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

#include <cstddef>
#include <list>
class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // write code here
        ListNode* virhead = new ListNode(-1);
        virhead->next = head;
	  //这里将fast指向虚拟头结点的下一个,是为了方便后面得到删除元素的前驱
	  //你将下面while改为 while(fast != nullptr && pos != n+1)是一样的效果
        ListNode* fast = virhead->next;
        ListNode* slow = virhead;
        size_t pos = 0;
        while(fast != nullptr && pos != n)
        {
            ++pos;
            fast = fast->next;
        }
        //保证n的正确
        if(pos != n) return nullptr;
        while(fast != nullptr)
        {
            slow = slow->next;
            fast = fast->next;
        }
        ListNode* del = slow->next;
        slow->next = slow->next->next;
        delete del;
        del = virhead->next;
	  //销毁分配的内存
        delete virhead;
        return del;
    }
};

全部评论

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
面试吐槽bot
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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