Monday, February 21, 2022

Leetcode 707. Design Linked List

Problem: https://leetcode.com/problems/design-linked-list/
#include <bits/stdc++.h>
using namespace std;
// 構造体
struct Node {
int val;
Node* next;
Node(int x) {
this->val = x;
this->next = NULL;
}
};
class MyLinkedList {
public:
// head アドレスメモ
Node* head = new Node(0);
int size = 0;
MyLinkedList() {}
int get(int index) {
// 例外
if (index >= size) return -1;
// index まで進む
auto cur = head;
for (int i = 0; i < index; i++) {
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
// 空なら
if (size == 0) {
head->val = val;
size++;
return;
}
// メンバーを作成
Node* node = new Node(val);
size++;
// 追加 & head 更新
node->next = head;
head = node;
}
void addAtTail(int val) {
// 空なら
if (size == 0) {
head->val = val;
size++;
return;
}
// メンバーを作成
Node* node = new Node(val);
size++;
// tail まで進む
auto cur = head;
while (cur->next) cur = cur->next;
// list に追加
cur->next = node;
}
void addAtIndex(int index, int val) {
// 例外
if (index > size) return;
// tail に追加
if (index == size) {
addAtTail(val);
return;
}
// head に追加
if (index == 0) {
addAtHead(val);
return;
}
// メンバーを作成
Node* node = new Node(val);
size++;
// index まで進む
auto cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur->next;
}
node->next = cur->next;
cur->next = node;
}
void deleteAtIndex(int index) {
if (size < index + 1) return;
size--;
if (index == 0) {
head = head->next;
return;
}
// index 直前まで進む
auto cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur->next;
}
cur->next = cur->next->next;
}
void print() {
cout << "size: " << size << endl;
if (size <= 0) return;
auto cur = head;
while (cur) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
};
void solve() {
MyLinkedList* obj = new MyLinkedList();
obj->addAtHead(7);
obj->addAtHead(2);
obj->addAtHead(1);
obj->addAtIndex(3, 0);
obj->print();
obj->deleteAtIndex(2);
obj->print();
}
int main() {
solve();
return 0;
}

No comments:

Post a Comment