This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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