刪除重複結點,只需要記錄當前結點前的最晚訪問過的不重複結點ppre、當前結點pcur、指向當前結點後面的結點pnext的三個指標即可。如果當前節點和它後面的幾個結點數值相同,那麼這些結點都要被剔除,然後更新ppre和pcur;如果不相同,則直接更新ppre和pcur。
需要考慮的是,如果第乙個結點是重複結點我們該怎麼辦?這裡我們分別處理一下就好,如果第乙個結點是重複結點,那麼就把頭指標phead也更新一下。
class
solution
// 指向當前結點前最晚訪問過的不重複結點
listnode* ppre =
null
;// 指向當前處理的結點
listnode* pcur = phead;
// 指向當前結點後面的結點
listnode* pnext =
null
;while
(pcur !=
null
)// 如果pcur指向鍊錶中第乙個元素,pcur -> ... -> pnext ->...
// 要刪除pcur到pnext, 將指向鍊錶第乙個元素的指標phead指向pnext->next。
if(pcur == phead)
// 如果pcur不指向鍊錶中第乙個元素,ppre -> pcur ->...->pnext ->...
// 要刪除pcur到pnext,即ppre->next = pnext->next
else
// 向前移動
pcur = pnext-
>next;
}// 如果當前結點與下乙個結點不相同
else
}return phead;}}
;
1、新建虛擬頭結點
2、找到存在重複元素的值,通過判斷下個及下下個元素的值是否相等來得到
3、判斷下個元素的值是否為重複元素的值,是的話刪除它
4、小心while中訪問空指標就行,最後返回結果
listnode*
deleteduplicates
(listnode* head)
}else
} listnode* newhead = prehead-
>next;
delete prehead;
return newhead;
}
LeetCode 82 刪除排序鍊錶中的重複元素
題目描述 給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。示例 1 輸入 1 2 3 3 4 4 5 輸出 1 2 5示例 2 輸入 1 1 1 2 3 輸出 2 3解題思路 總體思路就是把每個不重複的值重新重新放到乙個新的鍊錶裡面即可,需要乙個新的頭節點,兩個...
LeetCode82 刪除排序鍊錶的重複元素 II
給定乙個已排序的鍊錶的頭 head 刪除原始鍊錶中所有重複數字的節點,只留下不同的數字 返回 已排序的鍊錶 示例 1 輸入 head 1,2,3,3,4,4,5 輸出 1,2,5 示例 2 輸入 head 1,1,1,2,3 輸出 2,3 鍊錶中節點數目在範圍 0,300 內 100 node.va...
leetcode 82 移除有序鍊錶中的重複項之二
給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。示例 1 輸入 1 2 3 3 4 4 5 輸出 1 2 5示例 2 輸入 1 1 1 2 3 輸出 2 3由於鍊錶開頭可能會有重複項,被刪掉的話頭指標會改變,而最終卻還需要返回鍊錶的頭指標。所以需要定義乙個新的節...