반응형
https://leetcode.com/problems/remove-linked-list-elements/description/
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;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > 자료구조' 카테고리의 다른 글
(C++) - LeetCode (easy) 226. Invert Binary Tree (0) | 2023.01.11 |
---|---|
(C++) - LeetCode (easy) 206. Reverse Linked List (0) | 2023.01.06 |
(C++) - LeetCode (easy) 202. Happy Number (0) | 2022.12.30 |
(C++) - LeetCode (easy) 191. Number of 1 Bits (0) | 2022.12.17 |
(C++) - LeetCode (easy) 190. Reverse Bits (0) | 2022.12.16 |