1. 程式人生 > 其它 >LeetCode203:移除連結串列元素

LeetCode203:移除連結串列元素

技術標籤:我的leetcode刷題連結串列leetcode單鏈表資料結構c++

一、題目描述

    刪除連結串列中等於給定值 val 的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution { public: ListNode* removeElements(ListNode* head, int val) { //to do } };

二、解題思路

    當連結串列為空,返回nullptr;
    確保頭節點不是要刪除的節點

	while(head->val==val){
          head=head->next;
          if(head==nullptr)
              return nullptr;
      }

    使用雙指標p,q,兩指標緊挨著,遇到目標節點則刪除

	ListNode* p=head;
    ListNode* q=p->next;
    while(q!=nullptr){
        if(q->val==val){
            q=q->next;
            p->next=q;
            continue;
        } 
        p=p->next;
        q=p->next;
    }

三、我的程式碼

    直接在力扣上寫的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution { public: ListNode* removeElements(ListNode* head, int val) { if(head==nullptr) return nullptr; while(head->val==val){ head=head->next; if(head==nullptr) return nullptr; } if(head->next==nullptr) return head; ListNode* p=head; ListNode* q=p->next; while(q!=nullptr){ if(q->val==val){ q=q->next; p->next=q; continue; } p=p->next; q=p->next; } return head; } };

四、測試結果

在這裡插入圖片描述