菜雞每日一題系列打卡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)。
執行結果
相關鏈接
學習 | 工作 | 分享
????長按關注“有理想的菜雞”
只有你想不到,沒有你學不到