1. 程式人生 > >[LeetCode] Remove Linked List Elements 移除連結串列元素

[LeetCode] Remove Linked List Elements 移除連結串列元素

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

這道移除連結串列元素是連結串列的基本操作之一,沒有太大的難度,就是考察了基本的連結串列遍歷和設定指標的知識點,我們只需定義幾個輔助指標,然後遍歷原連結串列,遇到與給定值相同的元素,將該元素的前後連個節點連線起來,然後刪除該元素即可,要注意的是還是需要在連結串列開頭加上一個dummy node,具體實現參見程式碼如下:

解法一:

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummy = new ListNode(-1), *pre = dummy;
        dummy->next = head;
        while (pre->next) {
            if (pre->next->val == val) {
                ListNode *t = pre->next;
                pre
->next = t->next; t->next = NULL; delete t; } else { pre = pre->next; } } return dummy->next; } };

我們也可以用遞迴來解,寫法很簡潔,通過遞迴呼叫到連結串列末尾,然後回來,需要要刪的元素,將連結串列next指標指向下一個元素即可:

解法二:

class
Solution { public: ListNode* removeElements(ListNode* head, int val) { if (!head) return NULL; head->next = removeElements(head->next, val); return head->val == val ? head->next : head; } };

參考資料: