Day65:删除排序链表中的重复元素

143 阅读1分钟

Day14 2023/03/14

难度:简单

题目

给定一个已排序的链表的头heād,删除所有重复的元素使每个元素只出现一次。返回已排序 的链表。

提示: 链表中节点数目在范围(0,300)内
-100<=Node.va<=100
题目数据保证链表已经按升序排列

示例

输入:head = [1, 1, 2]
输出:[1,2]
复制代码

思路

因为链表已经排序,就可以直接用一个变量存储数值,然后在下个节点判断是否重复


```
public static void main(String[] args) {
    ListNode l1 = new ListNode(1,new ListNode(2,new ListNode(5,new ListNode(4,null))));
    l1.delete(l1);
   ListNode head = l1.reverseLink(l1);
    while (head != null){
        System.out.println(head.data);
        head = head.next;
    }
}
```

class ListNode{
    int data;
    ListNode next;

    public ListNode(int data, ListNode next) {
        this.data = data;
        this.next = next;
    }
    public ListNode delete(ListNode head){
        ListNode ln = head;
        int temp = ln.data;
        while (ln.next != null){
            if (temp == ln.next.data){
                if (ln.next.next != null){
                ln.next = ln.next.next;
                temp = ln.next.data;
                ln = ln.next;
                }
                else{
                    ln.next = null;
                }

            }else {
                ln = ln.next;
                temp = ln.data;
            }
        }
        return head;
    }
    public ListNode reverseLink(ListNode head){
        ListNode temp = head;
        ListNode cur = head;
        ListNode pre = null;
        while (cur != null){
            temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}
  • 时间复杂度 O(n)--- 不考虑创建链表所占用的时间,仅遍历整个链表,其中n为链表节点个数

  • 空间复杂度 O(n)---最坏情况下,该链表无重复节点,record辅助数组所占用的空间就等于链表节点个数n