82、83、删除排序链表中的重复元素II

  1. 示例 1:
  2. 示例 2:
  • 代码
    1. 示例 1:
    2. 示例 2:
  • 代码
  • 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

    示例 1:

    输入: 1->2->3->3->4->4->5
    输出: 1->2->5
    

    示例 2:

    输入: 1->1->1->2->3
    输出: 2->3
    

    代码

    • 双指针
    /**
     * 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 pre = new ListNode(head.val - 1);// 头节点,有效链表的最后一个节点
            pre.next = head;
            ListNode p = head;
            while(p != null && p.next != null){// 链表不为空
                // 发现重复元素
                if (p.val == p.next.val){
                    ListNode t = p.next;
                    // 找到后续不重复节点
                    while(t != null && t.val == p.val){
                        t = t.next;
                    }
                    pre.next = t;// 删除重复节点
                    if (head == p){
                        head = t;// 更新头节点
                    }
                    p = t;
                }else{
                    pre = p;
                    p = p.next;
                }
            }
            return head;
        }
    }
    // 快慢指针
    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            if (head == null) return head;
            ListNode dummy = new ListNode(-1000);
            dummy.next = head;
            ListNode slow = dummy;
            ListNode fast = dummy.next;
            while (fast != null) {
                while (fast.next != null && fast.val == fast.next.val) fast = fast.next;
                if (slow.next == fast) slow = slow.next;// 没有重复元素
                else slow.next = fast.next;// 有重复元素
                fast = fast.next;
            }
            return dummy.next; 
        }
    }
    
    // 作者:powcai
    // 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/solution/kuai-man-zhi-zhen-by-powcai-2/
    // 来源:力扣(LeetCode)
    // 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

    示例 1:

    输入: 1->1->2
    输出: 1->2
    

    示例 2:

    输入: 1->1->2->3->3
    输出: 1->2->3
    

    代码

    • 重复元素保留一个,保留第一个
    /**
     * 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 pre = new ListNode(head.val - 1);
            ListNode p = head;
            // pre.next = head;
            while (p != null && p.next != null) {
                if (p.val == p.next.val){
                    ListNode t = p.next;
                    while(t != null && t.val == p.val){
                        t = t.next;
                    }
                    p.next = t;
                    p = t;
                    // ==================
                    // p.next = p.next.next;
                    // ==================
                }else{
                    p = p.next;
                }
            }
            return head;
        }
    }
    // 官方代码
    public ListNode deleteDuplicates(ListNode head) {
        ListNode current = head;
        while (current != null && current.next != null) {
            if (current.next.val == current.val) {
                current.next = current.next.next;
            } else {
                current = current.next;
            }
        }
        return head;
    }
    
    // 作者:LeetCode
    // 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/solution/shan-chu-pai-xu-lian-biao-zhong-de-zhong-fu-yuan-s/
    // 来源:力扣(LeetCode)
    // 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

    💰

    Title:82、83、删除排序链表中的重复元素II

    Count:684

    Author:攀登

    Created At:2020-07-26, 00:19:44

    Updated At:2024-06-15, 15:52:32

    Url:http://jiafeimao-gjf.github.io/2020/07/26/82%E3%80%8183%E3%80%81%E5%88%A0%E9%99%A4%E6%8E%92%E5%BA%8F%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0II/

    Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

    ×

    Help us with donation