刪除鏈表中等於給定值 val 的所有節點。
示例 :
輸入 : 1->2->6->3->4->5->6, val = 6
輸出 : 1->2->3->4->5
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
思路:定義兩個指針(比如pPre,pCur),讓pPre指向頭結點,讓pCur指向頭的下一個結點,然後一起向前走,找值爲val的節點。找到後更新pPre,刪除pCur指向的結點就好了。當然,頭結點值可能也是val,我們最後再判斷,然後看是否要刪除就好
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (!head)return head;
struct ListNode* pPre = head;
struct ListNode* pCur = pPre->next;
while (pCur)
{
if (pCur->val == val)
{
pPre->next = pCur->next;
pCur = pPre->next;
}
else
{
pPre = pCur;
pCur = pCur->next;
}
}
if (head->val == val)
head = head->next;
return head;
}
};