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

2019-03-02  本文已影响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;
    }
    
};
上一篇 下一篇

猜你喜欢

热点阅读