Leetcode - 19. Remove Nth Node From End of List

숲사람·2022년 6월 30일
0

멘타트 훈련

목록 보기
79/237

문제

링크드 리스트의 head노드가 주어진다. 해당 링크드리스트의 뒤에서 n번째 노드를 삭제하라.

https://leetcode.com/problems/remove-nth-node-from-end-of-list/

해결 O(N^2)

노드를 순회하면서 매노드마다 n번 이동해서 node->next가 NULL이면 해당 노드를 제거하면 된다.

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode *node = head, *prev = head, *check = head;
    int node_cnt = 0;
    bool found = false;
    
    for (; node != NULL; prev = node, node = node->next) {
        check = node;
        for (int i = 0; i < n; i++) {
            if (i == n - 1 && check->next == NULL) {
                found = true;
                break;
            }
            check = check->next;
        }
        
        if (found) {
            // remove node
            if (node == head)
                head = node->next;
            else
                prev->next = node->next;
            break;
        }
        
    }
    return head;
}
profile
기록 & 정리 아카이브 용도 (보다 완성된 글은 http://soopsaram.com/documentudy)

0개의 댓글