typedef struct myListNode
{
int elem; //数据域
struct myListNode* next; //指针域
}myListNode;
typedef struct MyLinkedListTag
{
int val;
int count;
struct myListNode* head;
} MyLinkedList;
MyLinkedList* myLinkedListCreate()
{
MyLinkedList* myLink = malloc(sizeof(MyLinkedList));
myLink->head = NULL;
myLink->count = 0;
return myLink;
}
int myLinkedListGet(MyLinkedList* obj, int index)
{
if(obj->count<index)
return -1;
myListNode*indexit=obj->head;
int count=0;
int value=-1;
while(indexit!=NULL)
{
if(count==index)
{
value=indexit->elem;
break;
}
indexit=indexit->next;
count++;
}
return value;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val)
{
myListNode*newnode=(myListNode*)malloc(sizeof(myListNode));
newnode->elem=val;
newnode->next=NULL;
if(obj->head==NULL)
{
obj->head=newnode;
obj->count++;
}
else
{
newnode->next=obj->head;
obj->head=newnode;
obj->count++;
}
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val)
{
myListNode*newnode=(myListNode*)malloc(sizeof(myListNode));
newnode->elem=val;
newnode->next=NULL;
if(obj->head==NULL)
{
obj->head=newnode;
obj->count++;
}
else
{
myListNode*temp=obj->head;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=newnode;
newnode->next=NULL;
obj->count++;
}
}
void myLinkedListAddAtMiddle(struct myListNode* nodeIt, int val)
{
myListNode*newnode=(myListNode*)malloc(sizeof(myListNode));
newnode->elem=val;
newnode->next=NULL;
newnode->next=nodeIt->next;
nodeIt->next=newnode;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val)
{
if(obj->count<index)
return ;
if(index<=0)
{
myLinkedListAddAtHead(obj,val);
return;
}
myListNode*pointpre=obj->head;
myListNode*point=obj->head;
int count=0;
while(point!=NULL)
{
if(count>=index)
{
break;
}
count++;
pointpre=point;
point=point->next;
}
if(count==0)
{
myLinkedListAddAtHead(obj,val);
}
else if(count==obj->count)
{
myLinkedListAddAtTail(obj,val);
}
else{
myLinkedListAddAtMiddle(pointpre,val);
obj->count++;
}
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index)
{
if(obj->count<=index)
{
return;
}
myListNode*pointpre=obj->head;
myListNode*point=obj->head;
int count=0;
while(point!=NULL)
{
if(count==index)
break;
pointpre=point;
point=point->next;
count++;
}
if(count==0)
{
obj->head=obj->head->next;
}
else{
pointpre->next=point->next;
}
free(point);
obj->count--;
if(obj->count==0)
{
obj->head=NULL;
}
}
void myLinkedListFree(MyLinkedList* obj)
{
myListNode*pointpre=obj->head;
myListNode*point=obj->head;
while(point!=NULL)
{
point=point->next;
free(pointpre);
pointpre=point;
}
free(obj);
}