/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
if(!head || !n)
return head;
if(n == 1 && !head->next)
return nullptr;
ListNode* reHead = reverseList(head);
ListNode* tmpHead = reHead;
if(n == 1)
{
ListNode* tmp = tmpHead->next;
return reverseList(tmp);
}
while(n--)
{
if(n == 1)
{
ListNode* tmp = tmpHead->next->next;
tmpHead->next = tmp;
}
else
tmpHead = tmpHead->next;
}
return reverseList(reHead);
}
ListNode* reverseList(ListNode* head)
{
if(!head || !head->next)
return head;
ListNode* ret = nullptr;
while(head)
{
ListNode* tmp = head->next;
head->next = ret;
ret = head;
head = tmp;
}
return ret;
}
};