トピックの説明
指定されたリンク リスト内の繰り返し要素を削除します (リンク リスト内の要素は小さいものから大きいものへと並べられます)。これにより、リンク リスト内のすべての要素が 1 回だけ表示されます。たとえば、指定されたリンク リストは 1→1→2
です
。 return 1→2.
与えられた連結リストは 1→1→2→3→3 で、return 1→2→3 です。
データ範囲: 連結リストの長さが 0≤n≤100 を満たし、連結リスト内の任意のノードの値が ∣val∣≤100 を満たす
高度: 空間複雑度 O(1)、時間複雑度 O(n)
例 1:
入力: {1,1,2}
戻り値: {1,2}
例 2:
入力:{}
戻り値:{}
問題解決のアイデア
まず連結リストが空かどうかを判定し、空の場合は直接 null を返す. 連結リストの要素は順番通りなので、その都度現在のポインタが指している要素の内容と次の要素の内容が正しいかどうかを判定する.ポインタが同じ場合、次のノードを削除し、最後に head を返します (p ポインタが末尾に移動して連結リストの末尾を指し、head が連結リストの先頭を指すため) .
コード
/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/
/**
*
* @param head ListNode类
* @return ListNode类
*/
function deleteDuplicates( head ) {
//判断链表是否为空
if(!head) return null;
//链表中元素有序,每次判断当前指针和下一指针指向的元素内容是否相同
let p = head;
while(p.next) {
//相同则删除下一元素直到出现新元素
if(p.val == p.next.val) {
p.next = p.next.next;
} else {
p = p.next;
}
}
return head;
}
module.exports = {
deleteDuplicates : deleteDuplicates
};