删除从结尾到开头第n个的单向链表的值,并返回链表,通过用两个指针,一个在前,一个在后,他们之前的距离就为n,当前面的指针指到结尾时,后面的也就恰恰指到目标值了,当然我是按照指到目标的前一个值来计算的,这样容易计算。
返回的为summy而不是直接返回的是head是因为有可能只有一个值,然后返回的就什么都不是了,而且,如果删除的是第一个的话,那么无法连接到后面的数字
/**
* 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) {
//ListNode next,next2;
ListNode* summy=new ListNode(0);
summy->next=head;
ListNode* temp;
ListNode* temp1;
int cnt=0;
temp=summy;
while(temp!=NULL){
if(cnt==n )break;
temp=temp->next;
cnt++;
}
temp1=summy;
while(temp->next){
temp=temp->next;
temp1=temp1->next;
}
ListNode* to_delete=temp1->next;
temp1->next=(temp1->next->next);
delete to_delete;
return summy->next;
}
};