链表——设计链表
题目 707. 设计链表
typedef struct {
int val;
struct MyLinkedList* next;
} MyLinkedList;
MyLinkedList* myLinkedListCreate() {
MyLinkedList* head = (MyLinkedList *)malloc(sizeof(MyLinkedList));
head->next = NULL;
return head;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
MyLinkedList* cur = obj->next;
for (int i = 0; cur != NULL; ++i) {
if (i == index) {
return cur->val;
} else {
cur = cur->next;
}
}
return -1;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList *new_node = (MyLinkedList *)malloc(sizeof(MyLinkedList));
new_node->val = val;
new_node->next = obj->next;
obj->next = new_node;
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
MyLinkedList *cur = obj;
while(cur->next != NULL) {
cur = cur->next;
}
MyLinkedList *new_node = (MyLinkedList *)malloc(sizeof(MyLinkedList));
new_node->val = val;
new_node->next = NULL;
cur->next = new_node;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if (index == 0) {
myLinkedListAddAtHead(obj, val);
return ;
}
MyLinkedList* cur = obj->next;
for (int i = 1; cur != NULL; ++i) {
if (i == index) {
MyLinkedList* new_node = (MyLinkedList *)malloc(sizeof(MyLinkedList));
new_node->val = val;
new_node->next = cur->next;
cur->next = new_node;
break;
} else {
cur = cur->next;
}
}
return ;
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if (index == 0) {
MyLinkedList *tmp = obj->next; // 第0个点
if (tmp != NULL) {
obj->next = tmp->next;
free(tmp);
}
return ;
}
MyLinkedList* cur = obj->next; // 从第0个节点遍历,序号从1开始,方便删除
for (int i = 1; cur != NULL && cur->next != NULL; ++i) {
if (i == index) { // 相当于到了第 index-1 这个结点
MyLinkedList* tmp = (MyLinkedList *)malloc(sizeof(MyLinkedList));
tmp = cur->next; // tmp是要删除的结点
cur->next = tmp->next;
free(tmp);
return ;
} else {
cur = cur->next;
}
}
}
void myLinkedListFree(MyLinkedList* obj) {
while (obj != NULL) {
MyLinkedList *tmp = obj;
obj = obj->next;
free(tmp);
}
}
/**
* Your MyLinkedList struct will be instantiated and called as such:
* MyLinkedList* obj = myLinkedListCreate();
* int param_1 = myLinkedListGet(obj, index);
* myLinkedListAddAtHead(obj, val);
* myLinkedListAddAtTail(obj, val);
* myLinkedListAddAtIndex(obj, index, val);
* myLinkedListDeleteAtIndex(obj, index);
* myLinkedListFree(obj);
*/
东方欲晓,莫道君行早。

浙公网安备 33010602011771号