Leetcode.19. Remove Nth Node From End of List

題目

給定一個鏈表, 移除倒數(shù)第n個節(jié)點.

思路

思路和找倒數(shù)第k個數(shù)思路一致,先找一個指針向后移動,當?shù)谝粋€指針移到第k個位置時, 第二個指針開始移動, 第一個指針移到結尾時, 第二個指針移到倒數(shù)第k個.

本題需要刪除節(jié)點, 刪除節(jié)點分為刪除頭部還是刪除其他位置.刪除頭部就直接返回第2個節(jié)點, 刪除其他位置就要找到倒數(shù)第n+1個節(jié)點.

ListNode* removeNthFromEnd(ListNode* head, int n) {
    int k = 0;
    ListNode *result = head, *temp = nullptr;

    while (result != NULL) {
        result = result->next;
        k++;
        if (k == n+1) {
            // 找到倒數(shù)第n+1個節(jié)點
            temp = head;
        }else if (temp != NULL) {
            temp = temp->next;
        }
    }

    if (temp == NULL) {
        if (k == n) {
            // 移除頭部
            return head->next;
        }
    } else {
        // 移除中間節(jié)點
        temp->next = temp->next->next;
    }

    return head;
}

總結

分析各種情況, 區(qū)分鏈表刪除頭部和刪除其他節(jié)點.

??: 節(jié)點的next可能為null.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容