此题要注意的是,需要预先建立一个下一个元素指向head的链表,同时本题返回值也是该链表的下一个元素而不能直接返回head。如:链表为 [1] 时,删除倒数第一个节点,应得空链表,如果返回head,则会输出 [1],即第一个节点的值。
/**
* 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* temp=new ListNode(0);
temp->next=head;
ListNode* p = temp;
ListNode* q = temp;
for( int i = 0 ; i < n+1 ; i ++ ){
q = q->next;
}
while(q){
p = p->next;
q = q->next;
}
p->next = p->next->next; //将下一个节点变成哑节点
return temp->next;
}
};