刪除鍊錶中等於給定值 val 的所有節點。
示例:
輸入:1-
>2-
>6-
>3-
>4-
>5-
>
6, val =
6輸出:1-
>2-
>3-
>4-
>
5
方法1:
思想:遍歷原鍊錶的所有節點,比較每個節點的 val 值,將與 val 值不相等的節點挨個插入乙個新的鍊錶,每遇到乙個與 val 值 不相等的節點,就將該節點插入新鍊錶,且需要尾插。
具體實現:
定義變數
(1)原煉表中會有乙個頭節點 head,定義乙個 cur 變數表示當前變數,
使 cur = head;
(2) 定義乙個新的鍊錶result用來存放結果;
(3)原煉表中與val 值不相等的節點需要尾插入結果鍊錶,尾插時必須知道結果鍊錶的最後乙個節點,定義乙個last節點用來記錄結果鍊錶的最後乙個節點;
遍歷原鍊錶
(1)原鍊錶遍歷的條件:cur != null
原煉表在遍歷過程中節點進行增進:cur = cur.next
(2)在遍歷的過程中進行尾插
i. 把當前節點尾插入結果鍊錶,則當前節點就是結果鍊錶中的最後乙個節點,cur.next = null;
ii. 定義結果鍊錶時,定義為空;
當首次給結果鍊錶中插入節點即給定乙個頭結點,result = cur;last = cur
當結果鍊錶不為空時,last.next = cur;
然後更新最後乙個節點:last = cur;
返回結果鍊錶:return result;
**實現:
package www.fanfan.com;
/** * author:kelly_fanfan
*/public
class
leetcode203
}class
solution
else
//更新結果鍊錶的最後乙個節點
//也是通過 last = cur 將結果鍊錶與最後乙個節點聯絡起來
last = cur;
} cur = next;
}return result;}}
}
方法2:
思想:遍歷原鍊錶,將每個節點的 val 值與給定的 val 值進行比較,若相等,則直接刪除該節點,遍歷繼續往下走。最後所得的鍊錶就是刪除所有與 val 值相等的節點的鍊錶。
難點:要刪除乙個節點則必須要知道該節點的前乙個節點。但是頭結點之前再沒有節點,所以要特殊考慮頭結點的情況。
**實現:
package www.fanfan.com;
/** * author:kelly_fanfan
*/public
class
leetcode203
}class
solution
while
(head.val == val)
} listnode cur = head;
while
(cur.next != null)
else
}return head;}}
}
資料結構 移除鍊錶中值為val的元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 struct listnode 思路 定義兩個指標 比如ppre,pcur 讓ppre指向頭結點,讓pcur指向頭的下乙個結點,然後一起向前走,找值為val的節點。找到後更新ppr...
移除鍊錶元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 兩個引用,乙個指向頭結點,乙個指向頭結點的下乙個結點,要考慮頭結點為null的情況。遍歷鍊錶,當遇見和val相等的數,就直接把它刪掉,好要考慮當第乙個節點就是要刪除的節點時,直接h...
45 移除鍊錶元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 我的 效率很低,實現的很簡單,首先就是獲取第乙個不是val的字元,之後建立乙個新節點,然後一直判斷,比較笨拙 class solution else if list null li...