每日一題——刪除排序鏈表中的重複項

菜雞每日一題系列打卡83

每天一道算法題目 

小夥伴們一起留言打卡

堅持就是勝利,我們一起努力!

題目描述(引自LeetCode)

給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。

示例 1:
輸入: 1->1->2
輸出: 1->2
示例 2:
輸入: 1->1->2->3->3
輸出: 1->2->3

題目分析

這是每日一題——刪除排序鏈表中的重複項 II的簡單版,二者所不同的是,每日一題——刪除排序鏈表中的重複項 II要求只保留原始鏈表中沒有重複出現的數字,而本題要求使得每個元素只出現一次

這道鏈表操作的題目依然可以採用遞歸法和迭代法進行實現,本文中,菜雞將採用迭代法進行實現,以期獲得更好的空間複雜度。話不多說,上代碼!

代碼實現

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {


    public ListNode deleteDuplicates(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode low = head, fast = head.next;
        while (fast != null) {
            while (fast != null && low.val == fast.val) {
                fast = fast.next;
            }
            low.next = fast;
            low = low.next;
            if (fast != null) fast = fast.next;
        }
        return head;
    }
    
}

代碼分析

對代碼進行分析,程序對鏈表進行了遍歷,時間複雜度爲O(n),而就空間而言,僅僅使用了常數級別的額外空間,因此,空間複雜度爲O(1)。

執行結果

相關鏈接

每日一題——刪除排序鏈表中的重複項 II

學習 | 工作 | 分享

????長按關注“有理想的菜雞

只有你想不到,沒有你學不到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章