💥【每天學習億點點系列】——OJ203題:移除鏈表元素
- 題目
- 思路
- 代碼實作
- 注意點
- 1. 不要以為cur就是head節點
- 反例
- 2.特殊情況
- 找第一個不為val節點時
- 當nnext為空指標時,不能再對它訪問了
- 3.在你找第一個不為val的節點時要一起移動
題目

思路
有了前面順序表和oj題的練習,像這種題一看
三指標一定可以解決,我們用三個指標:pre記錄當前位置的前一個位置的,以便洗掉當前位置后重新連起來鏈表;cur記錄當前位置,判斷是否為val的值,是則洗掉節點,不是則往后移動(一起往后移動);nnext(為了不與結構體型別里面的next重名,故取名為nnext)方便移動時找到當前位置的下一個位置
代碼實作
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* cur=head;
struct ListNode* pre=NULL;
if(cur==NULL)
{
return NULL;
}
struct ListNode* nnext=cur->next;
//找到第一個不為val的位置,,那么那個位置一定是頭
while(cur)
{
if(cur->val!=val)
{
break;
}
else
{
pre=cur;
cur=cur->next;
if(nnext!=NULL)
nnext=nnext->next;
}
}
if(cur==NULL)
{
return NULL; //這時說明全為val,則回傳空
}
head=cur;
while(cur!=NULL)
{
if(cur->val!=val)
{
pre=cur;
cur=nnext;
if(nnext!=NULL)
{
nnext=nnext->next;
}
}
else
{
free(cur);
pre->next=nnext;
cur=nnext;
if(nnext!=NULL)
{
nnext=nnext->next;
}
}
}
return head;
}
注意點
1. 不要以為cur就是head節點
這是一開始的樣子

反例

2.特殊情況
找第一個不為val節點時


當nnext為空指標時,不能再對它訪問了
這些地方都是此處要注意的點



3.在你找第一個不為val的節點時要一起移動

最后附上自己寫后畫的一副圖解(可能寫的不是很詳細)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293959.html
標籤:其他

