代码随想录算法训练营Day3|203.移除链表元素 707.设计链表 206.反转链表
203.移除链表元素
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* preHead = (struct ListNode*)malloc(sizeof(struct ListNode));
preHead->next = head;
struct ListNode* p = preHead;
struct ListNode* q = head;
while (q) {
if(q->val == val){
q = q->next;
p->next = q;
p = p->next;
}else{
p = p->next;
q = q->next;
}
}
return preHead->next;
}

707.设计链表
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* list = (MyLinkedList*)malloc(sizeof(MyLinkedList));
struct ListNode* head = listNodeCreat(0);
list->head = head;
list->length = 0;
return list;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
if(index >= obj->length || index < 0){
return -1;
}
struct ListNode* p = obj->head;
for (int i = 0; i <= index; i++) {
p = p->next;
}
return p->val;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
myLinkedListAddAtIndex(obj, 0, val);
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
myLinkedListAddAtIndex(obj, obj->length, val);
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if(index > obj->length || index < 0){
return;
}
struct ListNode* pre = obj->head;
struct ListNode* cur = obj->head->next;
for (int i = 0; i < index; i++) {
pre = pre->next;
cur = cur->next;
}
struct ListNode* newNode = listNodeCreat(val);
newNode->next = cur;
pre->next = newNode;
obj->length++;
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if(index >= obj->length || index < 0){
return;
}
struct ListNode* pre = obj->head;
struct ListNode* cur = obj->head->next;
for (int i = 0; i < index; i++) {
pre = pre->next;
cur = cur->next;
}
pre->next = cur->next;
free(cur);
obj->length--;
}
void myLinkedListFree(MyLinkedList* obj) {
struct ListNode* p = obj->head;
struct ListNode* temp = obj->head;
while (p) {
temp = p;
p = p->next;
free(temp);
}
free(obj);
}

206.反转链表
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* p = head;
struct ListNode* last = NULL;
while (p) {
struct ListNode* next = p->next;
p->next = last;
last = p;
p = next;
}
return last;
}
