LeetCode203:移除連結串列元素
阿新 • • 發佈:2020-12-19
技術標籤:我的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;
}
};