文章目錄
- 題目
- 解題思維
- 反面教材(錯誤思維)
- 正確思維
- 最后附上程式
題目

這題可謂是進階版!不再要求我們洗掉指定val值的節點,而是我們去尋找鏈表 val值 重復的所有節點,
?
解題思維
反面教材(錯誤思維)
如果我們想采用 不帶頭的方式去解決非常麻煩
?
正確思維
創建一個 傀儡節點,與鏈表鏈接,使鏈表 帶頭,然后去判斷 傀儡節點后面是否 具有 兩個節點,如果有則判斷一下是否兩個節點之間的val 值,是否重復,如果重復,我們就將 其重復的val值,記錄一下,
再接著看!假設:當前我們已經得知 當前重復節點的 val / x 值 ,
此時,我們就拿著這個去遍歷陣列,發現有val值相同的節點,我們的cur.next 直接連走1步(洗掉這個節點),
不是重復的節點就好辦了,讓cur,next 走一步
就算一開始就是 val值 重復的節點,也不要緊,因為那個時候 cur 還在 傀儡節點newHead那里!
或者再狠一點,整個鏈表的節點都刪完了,無非就 cur.next == null == newHead.next,你會發現還是沒有影響,
這個題目不就解決了嗎?
?
最后附上程式
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null ){
return head;
}
ListNode newHead = new ListNode();
newHead.next = head;
ListNode cur = newHead;
while(cur.next!=null && cur.next.next!=null){
if(cur.next.val == cur.next.next.val){
int x = cur.next.val;
while(cur.next!=null && cur.next.val == x){
cur.next = cur.next.next;
}
}else{
cur = cur.next;
}
}
return newHead.next;
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392432.html
標籤:其他
上一篇:什么是嵌入式作業系統?







