1. 程式人生 > >每日一刷-leetcode

每日一刷-leetcode

2018.9.24    Q19

在思考了正常的流程後,需要單獨考慮一下邊界值:起始邊界等於-1、0、1,終止邊界等於len、len+1的情況,尤其是對於空不空的判斷。

本題中,正常的流程是:從頭開始數出間隔為 n 的節點(記為a,b),兩個節點一起向後移動,直到後一個節點為空,則前者節點即為倒數第 n 個節點。考慮到是要對節點進行刪除操作,所以最好的方法是 將待刪除節點的前一個節點 作為前者節點a,操作更合理。而對於邊界,則需要考慮正常的思路中能不能正確處理邊界的情況,不斷修正程式直至能夠正確處理所有資料。本題中,若連結串列長度為1,又保證了n是有效的,則直接返回NULL;若n=1,則需要考慮到待刪除節點在連結串列隊尾,不能訪問a->next->next(為NULL)的所有屬性(當然刪除操作不需要訪問這個節點的一些屬性);若n=連結串列長度,則需要考慮到,此時的a就是待刪除節點,而不是待刪除節點的前一個節點,直接 head = a即可。