1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| typedef struct { struct ListNode* head; int size; } MyLinkedList;
struct ListNode* ListNodeCreat(int val){ struct ListNode* node=(struct ListNode*)malloc(sizeof(struct ListNode)); node->val=val; node->next=NULL; return node; }
MyLinkedList* myLinkedListCreate() { MyLinkedList* obj=(MyLinkedList *)malloc(sizeof(MyLinkedList)); obj->head=ListNodeCreat(0); obj->size=0; return obj; }
int myLinkedListGet(MyLinkedList* obj, int index) { if(index<0||index>=obj->size){ return -1; } struct ListNode* cur=obj->head; for(int i=0;i<=index;i++){ cur=cur->next; } return cur->val; }
void myLinkedListAddAtHead(MyLinkedList* obj, int val) { myLinkedListAddAtIndex(obj,0,val); }
void myLinkedListAddAtTail(MyLinkedList* obj, int val) { myLinkedListAddAtIndex(obj,obj->size,val); }
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) { if(index>obj->size||index<0){ return; } obj->size++; struct ListNode* pred=obj->head; for(int i=0;i<index;i++){ pred=pred->next; } struct ListNode* neadd=ListNodeCreat(val); neadd->next=pred->next; pred->next=neadd;
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) { if(index>=obj->size||index<0){ return; } obj->size--; struct ListNode* pred=obj->head; for(int i=0;i<index;i++){ pred=pred->next; } struct ListNode* p=pred->next; pred->next=p->next; free(p); }
void myLinkedListFree(MyLinkedList* obj) { struct ListNode* cur=NULL,*tmp=NULL; for(cur=obj->head;cur;){ tmp=cur; cur=cur->next; free(tmp); } free(obj); }
|