题目
分析
删除从后往前数第N个元素可以转化成从前往后数第SUM - N + 1个元素
其次,删除的元素分三种情况,
1.如果是第一个元素(头结点)直接返回头结点的下一节点的指针即可
2.如果是最后一个元素,则把倒数第二个元素的Next赋值为空即可
3.如果是中间某个元素,那么让这个元素的前一个元素指向其后一个元素即可
题解
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int num = 0;
ListNode *p = head;
while(p != NULL){
num++;
p = p->next;
}
ListNode *q = head;
int index = num -n + 1;
if(index == 1)
return head->next; //删除头结点
else if(index == num){
ListNode *temp = head;
while(temp->next->next != NULL){ //删除最后一个节点需要找到倒数第二个结点
temp = temp->next;
}
temp->next = NULL;
return head;
}
else{
for(int i=0;i<index-2;i++)
q = q->next;
q->next = q->next->next;
return head;
}
}
};