#include <bits/stdc++.h>
using namespace std;
struct node {
int val;
node *next;
node(int x, node *next) {
this->val = x;
this->next = next;
}
};
node *head;
int size = 0;
int getSize() {return size;}
bool isEmpty() {return size == 0;}
//[0,size]
void insert(int index, int x) {
if (index<0 || index>size) {
cout << "the index is invalid!" << endl;
return;
}
node *p = head;
for (int i=0; i<index; ++i) p = p->next;
node *q = new node(x, p->next);
p->next = q;
size ++;
}
void insertTail(int x) {
insert(size, x);
}
void insertHead(int x) {
insert(0, x);
}
//[0,size-1]
void del(int index) {
if (index<0 || index>=size) {
cout << "the index is invalid" << endl;
return;
}
if (isEmpty()) {
cout << "the LinkedList is null!" << endl;
return;
}
node *p = head;
for (int i=0; i<index; ++i) p = p->next;
node *del = p->next;
p->next = del->next;
delete del;
size --;
}
void delFirst() {del(0);}
void delLast() {del(size-1);}
//[0,size-1]
int get(int index) {
if (index<0 || index>=size) {
cout << "the index is invalid!" << endl;
return -1;
}
if (isEmpty()) {
cout << "the LinkedList is null!" << endl;
return -1;
}
node *p = head->next;
for (int i=0; i<index; ++i) p = p->next;
return p->val;
}
int getLast() {return get(size-1);}
int getFirst() {return get(0);}
void show() {
node *p = head->next;
while (p) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
int main() {
head = new node(0, NULL);
int a[] = {1,2,3,4,5};
int n = sizeof(a)/sizeof(int);
for (int i=0; i<n; ++i) insertTail(a[i]);
show();
delFirst();
show();
delLast();
show();
cout << get(2) << endl;
cout << getFirst() << endl;
cout << getLast() << endl;
return 0;
}