美文网首页
leetcode 19. 删除链表的倒数第N个节点

leetcode 19. 删除链表的倒数第N个节点

作者: 橘子煲汤 | 来源:发表于2019-03-02 22:41 被阅读0次

    使用一遍扫描删除倒数第n个节点 使用了两个指针 并且固定两个指针间的距离为n+1 当第二个指针到达了null处 则删除第一个指针所指的后一个节点

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode* v = new ListNode(0);
            v->next = head;
            //首先创建虚拟头节点 并且把这个节点作为头结点 这是为了防止删除的是第一个节点
            
            ListNode*  first  = v;
            ListNode* seconed = first;
            for(int i=0;i<n+1;i++)
            {
                 seconed = seconed->next;
            }
            while(seconed!=nullptr)
            {
                first=first->next;
                seconed=seconed->next;
            } //first指针移到要删除的节点的前驱结点 这时seconed指针指向null
            
            //下面进行删除操作
            ListNode* deleNode =first->next;
            first->next = deleNode->next;
            ListNode* ans = v->next;
            
            delete deleNode;//记得把节点删了
            return ans;
        }
        
    };
    

    相关文章

      网友评论

          本文标题:leetcode 19. 删除链表的倒数第N个节点

          本文链接:https://www.haomeiwen.com/subject/ohhuuqtx.html