客戶推廣公司北京搜索引擎優(yōu)化管理專員
一、題目
給你一個(gè)鏈表的頭節(jié)點(diǎn)?head
?和一個(gè)整數(shù)?val
?,請(qǐng)你刪除鏈表中所有滿足?Node.val == val
?的節(jié)點(diǎn),并返回?新的頭節(jié)點(diǎn)?。
示例 1:
輸入:head = [1,2,6,3,4,5,6], val = 6 輸出:[1,2,3,4,5]
示例 2:
輸入:head = [], val = 1 輸出:[]
示例 3:
輸入:head = [7,7,7,7], val = 7 輸出:[]
二、思路解析
在最開始,我們先規(guī)避掉兩種情況:一是頭結(jié)點(diǎn)為空,而是頭結(jié)點(diǎn)剛好為要移除的元素。
這兩種情況我們直接把頭結(jié)點(diǎn) head 賦值為 head.next 即可,也就是把繞過這個(gè)節(jié)點(diǎn)的意思。
然后要是 head 這個(gè)頭結(jié)點(diǎn)為空,我們也直接返回掉就行。
剩下的都是不用提前返回的情況了,我們一步步來看:
跟上一題的 while 循環(huán)很相似,我們先定義一個(gè) cur 變量,其值為 head ,用于遍歷該鏈表。
只要 cur.next 不為空,就說明我們還沒走到底,這個(gè)鏈表可以繼續(xù)遍歷,所以我們把這個(gè)條件放到 while 循環(huán)的判斷條件中。
接著,只要找出 cur.next.val == val ,這種 “下一個(gè)元素等于要移除元素” 的情況,讓他的 next 域賦值為他的 next.next 即可,也就是把這個(gè)節(jié)點(diǎn)接到他的下下個(gè)節(jié)點(diǎn),從而達(dá)成了 “移除” 效果。
最后我們?cè)俜祷仡^結(jié)點(diǎn) head 即可。
三、完整代碼
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {while(head!=null && head.val ==val){head = head.next;}if(head==null){return head;}ListNode cur = head;while(cur.next!=null){if(cur.next.val==val){cur.next = cur.next.next;}else{cur = cur.next;}}return head;}
}
以上就是本篇博客的全部?jī)?nèi)容啦,如有不足之處,還請(qǐng)各位指出,期待能和各位一起進(jìn)步!