본문 바로가기

Algorithm/자료구조

(C++) - LeetCode (easy) 203. Remove Linked List Elements

반응형

https://leetcode.com/problems/remove-linked-list-elements/description/

 

Remove Linked List Elements - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

linked list 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

인자 head를 받아 deletedNode를 선언 후 저장해줍니다.

📔 풀이과정

1. 지울 node가 처음에 있는 경우를 대비해 시작지점을 옮겨줘야합니다. 값이 val이 아닌 node를 찾아 그 부분부터 시작합니다.

2. 걸러진 deletedNode에 대해 cur, prev를 선언 후 deletedNode로 초기화해 시작지점을 정해줍니다.

3. deletedNode를 cur을 이용해 순회합니다.

  3-1. cur->val이 val이라면 연속으로 지워야하는 경우를 생각해 while문을 돌며 val이 아닌 값을 찾아줍니다. 이후 val이 아닌값으로 prev->next를 설정해줍니다.

  3-2. val이 아니라면 prev와 cur를 next로 이동해줍니다.

📔 정답출력

걸러진 deletedNode를 반환합니다.


📕 Code

📔 C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *deletedNode = head;
        while(deletedNode != NULL && deletedNode->val == val) {
            deletedNode = deletedNode->next;
        }
        ListNode *cur = deletedNode;
        ListNode *prev = deletedNode;
        while(cur != NULL) {
            if(cur->val == val) {
                while(cur != NULL && cur->val == val) {
                    cur = cur->next;
                }
                prev->next = cur;
                continue;
            }
            prev = cur;
            cur = cur->next;
        }
        return deletedNode;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.