83. Remove Duplicates from Sorted List[值得review]

Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

这题我用O(1)space没做出来,就用了额外空间,一开始用的是hashset,发现hashset添加元素,里面的顺序跟原来不一样了。原来hashset的add是类似hashmap的O(1)的。于是用了List,这样contains操作复杂度又高了,O(n2)。

    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return null;
        List<Integer> set = new ArrayList<>();
        while (head != null) {
            if (!set.contains(head.val))
                set.add(head.val);
            head = head.next;
        }
        ListNode node = new ListNode(-1);
        ListNode fakeHead = node;
        for (Integer i : set) {
            node.next = new ListNode(i);
            node = node.next;
        }
        return fakeHead.next;
    }

下面是我想用fakeHead来做的,没做出来:

//  public ListNode deleteDuplicates(ListNode head) {
//      //这样可以吗,如果可以为什么要记录fakeHead.next = head
//      ListNode fakeHead = new ListNode(-1);
//      while (head != null) {
//          head.next = nextNonDuplicateNode(head);
//          head = head.next;
//      }
//      return fakeHead;
//  }
//
//  private ListNode nextNonDuplicateNode(ListNode node) {
//      if (node.next == null)
//          return null;
//      while (node.val == node.next.val) {
//          node = node.next;
//      }
//      return node.next;
//  }

事实上很简单的,按照数据结构书上那种就行了:
https://leetcode.com/problems/remove-duplicates-from-sorted-list/solution/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容