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; } };