每日刷題 刪除排序鍊錶中的重複元素 II

2021-09-07 13:16:55 字數 979 閱讀 5672

示例 1:

輸入: 1->2->3->3->4->4->5

輸出: 1->2->5

示例 2:

輸入: 1->1->1->2->3

輸出: 2->3

解答:有兩種思路。

第一種,開闢乙個新的陣列,用來記錄重複元素。。但是很有可能發生溢位,因此放棄了這種想法。

第二種,乙個o(n)的演算法,即利用已經排序好的特性,首先對於頭部的重複元素,例如[1,1,2,2,3]這種情況進行刪除處理需要頭指標移動,再對內部元素進行處理,例如[1,2,2,3]這種情況,設定三個指標prepre,pre,p,prepre指向重複元素的前乙個位置,pre和p用來比較是否重複。

**:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

}

listnode* prepre;

while

( p)

if( pre-

>val != p-

>val)

pre = pre-

>next, p = p-

>next;

else

} prepre-

>next = p;

pre = p, p = p-

>next;}}

}return head;}}

;

執行結果:

刪除排序鍊錶中重複元素

示例 1 輸入 1 2 3 3 4 4 5 輸出 1 2 5 示例 2 輸入 1 1 1 2 3 輸出 2 3 照例使用三個指標來 struct listnode deleteduplicates struct listnode head else 沒有重複的就正常移動 示例 1 輸入 1 1 2 ...

鍊錶 刪除排序鍊錶中的重複元素

一 遍歷方法 思路 通過遍歷一遍鍊錶在遍歷的過程中刪除節點,因為鍊錶是有序的,所以只需比較當前節點和當前節點的下乙個節點,這裡需要注意一下,如果有重複的使用了head.next head.next.next刪除下乙個節點了,但是於下乙個新的節點對比還是現在這個節點,所以不要head head.nex...

刪除排序鍊錶中的重複元素 鍊錶

今天我們開始另一模組的演算法題,關於鍊錶的操作.let s do it 題目 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次.示例1 輸入 1 1 2 輸出 1 2 示例2 輸入 1 1 2 3 3 輸出 1 2 3 思想 public class listnode func dele...