LeetCode83.删除排序链表中的重复元素

90 阅读1分钟

LeetCode83.删除排序链表中的重复元素

原题链接

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。

题解

遍历:时间复杂度 O(n)O(n)

从前往后扫描整个链表,用cur保存新链表的最后一个结点。由于整个链表是排好序的,所以若cur与当前结点的值不相等,则添加到cur链表后面。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return head;
        ListNode cur = head;
        for (ListNode p = head.next; p != null; p = p.next) {
            if (p.val != cur.val) {
                cur = cur.next = p;
            }
        }
        cur.next = null;
        return head;
    }
}