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

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

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

思路:快慢指针,快指针先走n步,然后慢指针和快指针同时走直到快指针走到尾端,此时慢指针指向要删除的结点的前导结点。注意在操作链表的过程中使用虚拟头结点dummy_head。

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

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummy_node=new ListNode{-1};
        dummy_node->next=head;
        ListNode* slow=dummy_node;
        ListNode* fast=dummy_node;
        while(n-- && fast->next!=nullptr) fast=fast->next;
        while(fast->next!=nullptr){
            slow=slow->next;
            fast=fast->next;
        }
        auto temp=slow->next;
        slow->next=slow->next->next;
        delete temp;
        return dummy_node->next;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:46
点赞 评论 收藏
分享
蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务