連結串列中刪除倒數第k個
阿新 • • 發佈:2019-01-13
要點:1 head正向走動k個 2 另外一個pre、head1和head 走,至到head盡頭 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) { if(head==NULL||n<=0){ return NULL; } ListNode *h1=head,*h2=head;; ListNode *pre=NULL; for(int i=0;i<n;i++){ if(h1){ h1=h1->next; }else{ return NULL; } } while(h1){ h1=h1->next; pre=h2; h2=h2->next; } if(pre==NULL){ head=head->next; delete h2; return head; } pre->next=h2->next; delete h2; h2=NULL; return head; } }; if(head==NULL||n<=0){ return head; } ListNode *temp=head; ListNode *slow=head; ListNode *pre=NULL; for(int i=0;i<n;++i){ if(temp){ temp=temp->next; }else{ return NULL; } } while(temp){ temp=temp->next; slow=slow->next; pre=slow; } if(pre==NULL){ head=head->next; return head; } pre->next=slow->next; slow=NULL; return head; }