白癡賽區讓我一盤小康->赤貧
來刷點P幣
※ 引述《oin1104 (是oin的說)》之銘言:
: 突然發現有點久沒紀錄= =
: 今天每日是
: 19. remove Nth Node from end of list
: 叫你刪除從後面數的第N個節點
: 解法:
先算總長度就蠻簡單的
但follow up要求用one pass
其實我也不確定怎樣叫one pass
要刪倒數第n個
就要找到倒數第n+1個
用2個pointer a b
b先走n步後
ab再同時一步一步動
當b走到最後一個節點的時候
a就是倒數第n+1個了
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *new_head = malloc(sizeof(struct ListNode)*1);
struct ListNode *slow = new_head, *fast = new_head;
int i;
new_head->next = head;
for(i=0; i<n; i++)
fast = fast->next;
while(fast->next){
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;
return new_head->next;
}
之前寫過
結果今天看了10分鐘完全想不到...
真不知道我當初怎麼想到的