leetcode-移除連結串列元素-9
阿新 • • 發佈:2021-01-29
技術標籤:oj題
移除連結串列元素
題目要求
刪除連結串列中等於給定值val的所有節點。
示例1:
輸入:1->2->6->3->4->5->6,val = 6
輸出:1->2->3->4->5
思路
如果陣列是空陣列,那麼直接返回頭結點。如果陣列全是目標節點,那麼就釋放所有空間,並且將頭結點置空,如果陣列前面僅僅只是有目標節點,將這些目標節點跳過,找到第一個不是目標節點的數,從這個節點開始,進行一快一慢指標的查詢,快指標負責找和val值一樣的節點,慢指標負責跳過,並將val空間釋放,next指標置空。
圖解
程式碼實現
struct ListNode* removeElements(struct ListNode* head, int val){ if (head == NULL) { return head; } while (head != NULL && head->val == val) { if (head->next == NULL) { head->next = NULL; head = NULL; return head; } head = head->next; } //快 struct ListNode* a = head->next; //慢 struct ListNode* b = head; while (a != NULL) { //判斷是否是目標值 if (a->val == val) { struct ListNode* c = a->next; b->next = c; a->next = NULL; free(a); a = c; } else { b = a; a = a->next; } } return head; }