牛客網高頻演算法題系列-BM15-刪除有序連結串列中重複的元素-I
題目描述
刪除給出連結串列中的重複元素(連結串列中元素從小到大有序),使連結串列中的所有元素都只出現一次
解法一:連結串列遍歷
首先,考慮特殊情況,如果連結串列為空或者只有一個結點,不會有重複的元素,返回原連結串列。
否則,遍歷連結串列結點,判斷是否有重複的元素,處理過程如下:
- 使用pre記錄上一個未重複的結點,初始化為連結串列頭;
- 然後從連結串列的第二個結點next開始遍歷連結串列結點;
- 如果next和pre的值相同,則刪除當前重複結點;
- 如果next和pre的值不相同,則更新pre的值。
遍歷完成後,連結串列的頭結點並沒有變化,返回頭結點即可。
程式碼
public class Bm015 {
/**
* 刪除有序連結串列中重複的元素-I
*
* @param head ListNode類
* @return ListNode類
*/
public static ListNode deleteDuplicates(ListNode head) {
// 如果連結串列為空或者只有一個結點,不會有重複的元素,返回原連結串列
if (head == null || head.next == null) {
return head;
}
// pre記錄上一個未重複的結點
// next為從第二個節點開始判斷是否有重複元素
ListNode pre = head, next = head.next;
// 遍歷連結串列
while (next != null) {
// 如果當前結點的值和pre的值相同,則要刪掉當前結點,修改pre的next指標即可
if (pre.val == next.val) {
pre.next = next.next;
} else {
// 如果當前結點未重複,則更新pre
pre = next;
}
next = next.next;
}
return head;
}
public static void main(String[] args) {
ListNode head = ListNode.testCase6();
System.out.println("原連結串列為");
ListNode.print(head);
System.out.println("刪除有序連結串列中重複的元素後的連結串列為");
ListNode.print(deleteDuplicates(head));
}
}
$1.01^{365} ≈ 37.7834343329$
$0.99^{365} ≈ 0.02551796445$
相信堅持的力量!