intmyLinkedListGet(MyLinkedList* obj, int index) {//获取下标为index的节点值,没有返回-1 intcout = 0; obj = obj->next; while (obj){ if (index == cout){ return obj->val; } obj = obj->next; cout++; } return-1; }
voidmyLinkedListAddAtHead(MyLinkedList* obj, int val) {//插入至第一个元素之前 MyLinkedList* first = (MyLinkedList*)malloc(sizeof(MyLinkedList)); first->val = val; first->next = obj->next; obj->next= first; }
voidmyLinkedListAddAtTail(MyLinkedList* obj, int val) {//插入至最后一个元素之后 MyLinkedList* last = (MyLinkedList*)malloc(sizeof(MyLinkedList)); last->val = val; last->next = NULL; MyLinkedList* cur; cur = obj->next; if (cur == NULL) { obj->next = last; } while (cur){ if (cur->next == NULL){ cur->next = last; break; } else{ cur = cur->next; } }
}
voidmyLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {//将val插入下标index节点之前 MyLinkedList* mid = (MyLinkedList*)malloc(sizeof(MyLinkedList));//没注意。如果index等于链表长度,则把val加在链表末端 MyLinkedList* before = (MyLinkedList*)malloc(sizeof(MyLinkedList)); MyLinkedList* cur; MyLinkedList* pre = obj; mid->val = val; int flag = 1; intcout = 0; cur = obj->next; while (cur){ if (index == cout) { pre->next= mid; mid->next = cur; flag = 0; break; } cout++;//在cur指向NULL的时候,cout还加了1 pre = cur; cur = cur->next; } if (index == (cout)&&flag){ pre->next = mid; mid->next = NULL; } }
voidmyLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {//如果下标有效,删除下标为index的节点 intcout = 0; MyLinkedList* pre = obj; MyLinkedList* temp; MyLinkedList* cur; //temp = obj->next;//第一个元素 if (index == 0){ temp = obj->next; obj->next = obj->next->next; free(temp); } cur = obj->next; if (index !=0 ) { while (cur) { if (index == cout) { pre->next = cur->next; free(cur); break; } cout++; pre = cur; cur = cur->next; } }
}
voidmyLinkedListFree(MyLinkedList* obj) {//释放链表所有元素 MyLinkedList* cur; MyLinkedList* pre; cur = obj->next; while (cur){ pre = cur; cur = cur->next; free(pre); } pre = obj; free(pre); }