分析:鏈表刪除操作。
兩種方法,可以兩遍遍歷刪除,也可以一遍遍歷(雙指針方法)。
第一種,兩遍遍歷。
鏈表刪除操作,記得在頭結點前加一個預處理結點,用來防止鏈表就頭結點一個元素,刪除爲空的情況!一開始就是因爲忘記加預處理結點錯了。
/**c
* 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 *p=head;
ListNode *ans=new ListNode(-1); //申請一個輔助頭結點,處理刪除爲空的情況
ans->next=head;
ListNode *q=ans;
int len=0;
while(p){len++;p=p->next;}
for(int i=1;i<=len-n;i++) {q=q->next;}
q->next=q->next->next;
return ans->next;
}
};