力扣 19.删除链表的倒数第N个结点

力扣 19.删除链表的倒数第N个结点_第1张图片
代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        //空间换时间,用一个vector记录个结点指针
        vector<ListNode*> temp;
        //遍历一遍
        ListNode *cur=head;
        int count=0;
        while(cur!=nullptr){
            temp.push_back(cur);
            cur=cur->next;
            count++;
        }
        temp.push_back(nullptr);//最后一个为空
        if(count==1) return nullptr;
        else if(count==n) return head->next;//如果删除的是第一个节点
        else{
            int m=temp.size()-1;//因为 最后一个为nullptr
            temp[m-n-1]->next=temp[m-n+1];//删除倒数第n个
            return head;//假头结点的下一个
        }
        
    }
};

明明想着空间换时间,但结果时间好像也不怎么快 /(ㄒoㄒ)/~~
力扣 19.删除链表的倒数第N个结点_第2张图片

你可能感兴趣的:(力扣,leetcode,链表,算法)