#include <stdio.h>
#include <stdbool.h>
#include <assert.h>
#include <stdlib.h>
#include <limits.h>
struct Node {
int item;
struct Node* next;
};
typedef struct Node Node;
Node* head = NULL;
int N = 0;
bool isEmpty() {
return N == 0;
}
int size() {
return N;
}
void push(int item) {
Node* newNode = (Node *) malloc(sizeof(Node));
newNode->item = item;
newNode->next = head;
head = newNode;
N++;
}
int get(int idx) {
if(idx < 0 || idx >= N) return INT_MIN;
Node* curr = head;
for(int i = 0; i < idx; i++) curr = curr->next;
return curr->item;
}
int removeAt(int idx) {
if(idx < 0 || idx >= N) return INT_MIN;
Node* curr = head;
Node* prev = NULL;
for(int i = 0; i < idx; i++) {
prev = curr;
curr = curr->next;
}
int item = curr->item;
if(prev == NULL) head = curr->next;
else prev->next = curr->next;
free(curr);
N--;
return item;
}
void testLinkedList() {
push(3);
push(10);
push(20);
assert(isEmpty() == false);
assert(size() == 3);
assert(get(0) == 20);
assert(get(1) == 10);
assert(get(2) == 3);
assert(removeAt(1) == 10);
assert(size() == 2);
assert(get(0) == 20);
assert(get(1) == 3);
assert(removeAt(0) == 20);
assert(size() == 1);
assert(get(0) == 3);
assert(removeAt(0) == 3);
assert(size() == 0);
assert(isEmpty());
}
int main() {
testLinkedList();
printf("All tests passed!!\\n");
return 0;
}