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

时间:2021-07-15
本文章向大家介绍leetcode-19. 删除链表的倒数第 N 个结点,主要包括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;
    }
};

原文地址:https://www.cnblogs.com/ymec/p/15014943.html