#include<stdio.h>

#include<stdlib.h>

#include<string.h>


typedef struct LinkedListNode_ {

int value;

struct LinkedListNode_* next;

}Node;


typedef struct LinkedListHeader_ {

int count;

Node head;

}LinkedListHeader;


LinkedListHeader* init() {

LinkedListHeader* linkedList = (LinkedListHeader*)malloc(sizeof(LinkedListHeader));

linkedList->count = 0;

linkedList->head.next = NULL;

return linkedList;

}


void add(LinkedListHeader* list, int value) {

Node* node = &(list->head);

Node* newNode = (Node*)malloc(sizeof(Node));

int i;


for (i = 0; ; i++) {

if (node->next == NULL) break;

node = node->next;

}

node->next = newNode;

newNode->value = value;

newNode->next = NULL;

list->count++;

}


void addAt(LinkedListHeader* list, int value, int pos) {

Node* node = &(list->head);

Node* prev = NULL;

Node* newNode = (Node*)malloc(sizeof(Node));

int i;


for (i = 0; i <= pos; i++) {

if (node->next == NULL) return;

prev = node;

node = node->next;

}


newNode->value = value;

newNode->next = node;

prev->next = newNode;

list->count++;

}


void removeNode(LinkedListHeader* list, int pos) {

Node* node = &(list->head);

Node* before = node;

int i;

for (i = 0; i <= pos; i++) {

if (node == NULL) return;

before = node;

node = node->next;

}

before->next = node->next;

free(node);

list->count--;

}


int getLength(LinkedListHeader* list) {

return list->count;

}


int getNodeValue(LinkedListHeader* list, int pos) {

Node* node = &(list->head);

int i;

for (i = 0; i<=pos; i++) {

if (node == NULL) return -1;

node = node->next;

}

return node->value;

}


void main() {

LinkedListHeader* linkedList = init();


add(linkedList, 100);

add(linkedList, 200);

add(linkedList, 300);

add(linkedList, 400);

add(linkedList, 500);


addAt(linkedList, 30, 2);


removeNode(linkedList, 1);


printf("%d \n", getLength(linkedList));


int i;

for(i=0; i<getLength(linkedList); i++)

printf("%d \n", getNodeValue(linkedList, i));

}



포인터도 제대로 모르는 개좁밥인데 1시간동안 만듬