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

 

 

/**
 * 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) {
        int len = getlength(head);
        if(len<n)  // 如果倒数超出长度,超出范围
            return NULL;

        ListNode* L = new ListNode(0);  // 习惯,一般链表题直接添加一个头节点方便计算。
        ListNode* H = L;
        L->next = head;
        int count = 0;
        cout<<"len:"<<len<<endl;
        
        while(L){
            if(count==len-n){  // 先计算长度,在算出从前数第几个应该开始
                L->next = L->next->next;
                break;
            }else
                L = L->next;
            count ++;

        }
        return H->next;
    }
    
    int getlength(ListNode* H){
        if(H==NULL)
            return 0;
        int count = 0;
        while(H){
            H= H->next;
            count++;
        }
        return count;
    }
};

 

posted @ 2021-07-15 12:25  三一一一317  阅读(37)  评论(0)    收藏  举报