๐๏ธ Daily LeetCoding Challenge August, Day 15
Linked List
Linked List ๋ฌธ์ ๋ ์ฒ์ ํ์ด๋ณธ๋ค. ๊ฐ์ ์ ์ผ๋ก array์ ์ด์ฉํด์ ๋น์ทํ๊ฒ๋ ํ์ด๋ดค์ง๋ง, linked list ์์ฒด๋ฅผ ์ฌ์ฉํด๋ณธ๊ฑด ์ด๋ฒ์ด ์ฒ์. ๋ฌธ์ ์์ ๋กํ๋ ListNode๊ฐ ์ ์๋์ด ์์ด์ ๋ง์ด ๋นํฉํ๋ค. ์ด๋ป๊ฒ ๊ฐ์ ๋ถ๋ฌ์ค๋์ง์กฐ์ฐจ ๋ง์ค์ด๊ฒ ๋์๋ค. ์์ ๋ฅผ ์ด์ฉํด์ ์ค์ linked list์ ๊ทธ๋ฆฌ๋ฉด์ ํ์ด๋ณด๋๊น ์ดํด๊ฐ ์ ๋์๋ค.
๋์ ํ์ด
Linked List๋ ๋ชฉ๊ฑธ์ด์ฒ๋ผ ๊ฐ Node๊ฐ ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. array์๋ ๋ค๋ฅด๊ฒ index๊ฐ ์ ํด์ง์ง ์๊ณ ๊ฐ Node๋ val
๋ฐ์ดํฐ ํ๋์ ๋ค์ Node๋ฅผ ๊ฐ๋ฆฌํค๋ *next
๋งํฌ ํ๋๋ฅผ ๊ฐ์ง๋ค. ๋น์๋์์์ง์ฒ๋ผ ์ค์ค์ด ์ฎ์ด๋ด๋ฉด linked list๊ฐ ์์ฑ๋๋ค. index ๊ณ ๋ ค๋ฅผ ํฌ๊ฒ ํ์ง ์์๋ ๋ผ์ ๋น๊ต์ ๊ฐ๋จํ๊ฒ ํ์ด๋ผ ์ ์๋ค.
/**
* 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* partition(ListNode* head, int x) {
// head->1->4->3->2->5->2
ListNode* curr = head;
ListNode* less_head = new ListNode(0); // dummy node (node < x)
ListNode* less_tail = less_head; // less tail pointer
ListNode* large_head = new ListNode(0); // dummy node (node >= x)
ListNode* large_tail = large_head; // large tail pointer
while (curr != nullptr){
if (curr -> val < x){
less_tail -> next = new ListNode(curr -> val);
less_tail = less_tail -> next; // move tail pointer
} else{
large_tail -> next = new ListNode(curr -> val);
large_tail = large_tail -> next; // move tail pointer
}
curr = curr -> next; // to the next node
}
// result
// less_head->0->1->2->2
// large_head->0->4->3->5
less_tail -> next = large_head -> next;
// concatenate less and large List
// less_head->0->1->2->2->4->3->5
return less_head -> next;
// 1->2->2->4->3->5
}
};