這個題!!我覺得好熟悉!!應(yīng)該是在編程之美上見過!
題目要求:給定單鏈表L和n n表示需要刪掉的倒數(shù)第n個節(jié)點
思路:最開始蹦上腦子的就是 遍歷->得節(jié)點數(shù)->再遍歷max-n個節(jié)點->刪除
然后題目要求是最好一次遍歷 突然想到了用快慢指針 兩指針之間相差n個節(jié)點 當(dāng)fast->next指針指到NULL時 慢指針也就指向了倒數(shù)第n+1個節(jié)點 方便刪除倒數(shù)第n個節(jié)點
這里首先需要注意一下當(dāng)鏈表只有一個元素并且需要刪除倒數(shù)第一個節(jié)點時 fast會指向NULL 再判斷fast->next會出現(xiàn)runtime error 所以需要遍歷條件需要時while(fast && fast->next) 同時在這種情況下slow的值就是頭指針 如果按照平常情況下的處理 slow->next = slow->next->next 的話 等式左邊就已經(jīng)是NULL了 所以對于刪除節(jié)點也要特殊處理 這種情況下 直接將頭節(jié)點往后挪一個就可以了