LeetCode集錦(十九) - 第83題 Remove Duplicates from sorted list

問題

Given a sorted linked list, delete all duplicates such that each element appear only once. 

 Example 1: 


Input: 1->1->2
Output: 1->2


 Example 2: 


Input: 1->1->2->3->3
Output: 1->2->3

複製代碼

翻譯:

給定一個已排序的鏈表,刪除全部重複項,使每一個元素只出現一次。 示例1: 輸入:1 - > 1 - > 2 輸出:1 - > 2 示例2: 輸入:1 - > 1 - > 2 - > 3 - > 3 輸出:1 - > 2 - > 3bash


解題思路

本題思路很簡單,因爲鏈表是有序的,說明若是有重複的,確定是下一個,按照順序進行遍歷,若是遇到當前節點和後一個節點相同,那麼覆蓋當前節點。遍歷一次就搞定了app

解題方法

  1. 按照咱們的思路來編輯,代碼以下ui

    public ListNode deleteDuplicates(ListNode head) {
    
        if (head == null) {
            return head;
        }
    
        ListNode temp = head;
        while (head.next != null) {
            if (head.val == head.next.val) {
                head.next = head.next.next;
                continue;
            }
            head = head.next;
        }
        return temp;
    
    }
    
    public class ListNode {
        int val;
        ListNode next;
    
        ListNode(int x) {
            val = x;
        }
    }
    複製代碼

    時間複雜度: 該方案用了循環m因此f(n)=(n)=n;因此O(f(n))=O(n),即T(n)=O(n)spa

    空間複雜度: 該方案使用了沒有使用額外空間,因此空間複雜度是O(n)=O(1);翻譯

總結

本題的大體解法如上所訴,本題大體只有一種解題方式,直接遍歷讀取覆蓋便可,我是經過當前節點和下一個節點進行比較,也能夠和前一個節點進行比較 。code

相關文章
相關標籤/搜索