分析:这次写的代码虽然过了但是是根据测试用例出错了慢慢改的,代码也不是很漂亮。。具体差别就是如果刚好要删掉的是头指针的值,就会比较麻烦。两种代码如下,第一个更好一些。
代码:
/**
* 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* newhead=new ListNode(-1);
newhead->next=head;
ListNode* p=head;
ListNode* q=head;
ListNode* pre=newhead;
while(n){
p=p->next;
n--;
}
while(p){
pre=q;
q=q->next;
p=p->next;
}
pre->next=q->next;
return newhead->next;
}
};
/**
* 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* newhead=new ListNode(-1);
newhead->next=head;
ListNode* p=head;
ListNode* q=head;
while(n>0&&p->next){
p=p->next;
n--;
}
if(n){
newhead->next=newhead->next->next;
return newhead->next;
}
while(p->next!=NULL){
p=p->next;
q=q->next;
}
q->next=q->next->next;
return newhead->next;
}
};