typedef struct Listnode{
int val;
struct Listnode* next;
} MyLinkedList;
MyLinkedList* create(int val){
MyLinkedList* p=(MyLinkedList*)malloc(sizeof(MyLinkedList));
p->val=val;
p->next=NULL;
return p;
}
MyLinkedList* myLinkedListCreate() {
MyLinkedList* Node=(MyLinkedList*) malloc(sizeof(MyLinkedList));
Node->next=create(0);
Node->val=0;
return Node;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
if(index<0||index>=obj->val) return -1;
MyLinkedList* Node=obj->next;
while(index>=0){
Node=Node->next;
index--;
}
return Node->val;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
MyLinkedList* node=obj->next;
if (index>obj->val||index<0)return;
for (int i = 0; i < index; i++) {
node = node->next;
}
obj->val++;
MyLinkedList* newnode=create(val);
newnode->next=node->next;
node->next=newnode;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
myLinkedListAddAtIndex(obj,0,val);
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
myLinkedListAddAtIndex(obj,obj->val,val);
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if(index<0||index>=obj->val) return;
obj->val--;
MyLinkedList* node=obj->next;
while(index>0){
node=node->next;
index--;
}
MyLinkedList* temp=node->next;
node->next=temp->next;
free(temp);
}
void myLinkedListFree(MyLinkedList* obj){
MyLinkedList* cur=NULL,*tmp=NULL;
for(cur=obj->next;cur;){
tmp=cur;
cur=cur->next;
free(tmp);
}
free(obj);
}