zoukankan      html  css  js  c++  java
  • LeetCode-082-删除排序链表中的重复元素 II

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

    题目描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

    返回同样按升序排列的结果链表。

    示例说明请见LeetCode官网。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法一:链表遍历

    首先,声明一个新的链表头结点newHead,last指向新的头结点newHead,cur指向老的头结点head,然后遍历链表head,遍历过程如下:

    • 声明一个boolean变量isRepeated来标识当前节点是否是重复节点;
    • 声明next为cur的next节点,通过循环过程找到下一个跟cur节点的数字不同的节点,并且判断当前节点是否是重复的并更新isRepeated;
    • 如果isRepeated为true,说明当前节点是重复的,则跳过这个重复节点,然后处理下一个节点;
    • 如果isRepeated为false,说明后面的节点没有和当前节点相同的,将当前节点加入到last的next节点中,然后处理下一个节点。

    最后返回newHead的next节点即为结果。

    public class LeetCode_082 {
        public static ListNode deleteDuplicates(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
            ListNode newHead = new ListNode(-1);
            ListNode last = newHead, cur = head;
            while (cur != null) {
                // 当前节点是否是重复的标识
                boolean isRepeated = false;
                ListNode next = cur.next;
                // 找到下一个跟cur节点的数字不同的节点,并且判断当前节点是否是重复的
                while (next != null && next.val == cur.val) {
                    isRepeated = true;
                    next = next.next;
                }
                if (isRepeated) {
                    // 如果当前节点是重复的,则跳过这个重复节点
                    cur = next;
                } else {
                    // 如果当前节点不是重复的,则作为last的下一个节点
                    last.next = new ListNode(cur.val);
                    last = last.next;
                    cur = next;
                }
            }
            return newHead.next;
        }
    
        public static void main(String[] args) {
            ListNode head = new ListNode(1);
            head.next = new ListNode(2);
            head.next.next = new ListNode(2);
    
            ListNode result = deleteDuplicates(head);
            while (result != null) {
                System.out.print(result.val + " ");
                result = result.next;
            }
        }
    }
    

    【每日寄语】 你若等待,清风自来。等待可能是一阵风,等待的有可能是一个机会,等待的有可能是一个人,但你终归你得等,你不等,那个风是不会来的。

  • 相关阅读:
    90. 子集 II
    274. H 指数
    1291. 顺次数
    StreamWriter 跟BinaryWriter的区别
    非常有用的正则表达式
    linux菜单恢复
    VS2008的诡异问题
    一些常用算法 练手的的代码
    string 类型为空的处理方法
    left jion 的多表连接用法。
  • 原文地址:https://www.cnblogs.com/kaesar/p/15183289.html
Copyright © 2011-2022 走看看