zoukankan      html  css  js  c++  java
  • leetcode 82. 删除排序链表中的重复元素 II

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

    示例 1:

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

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

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

     1 public class _82 {
     2     public ListNode deleteDuplicates(ListNode head) {
     3         if (head == null || head.next == null) return head; // 有0个或1个节点
     4         if (head.next.next == null && head.val == head.next.val) return null; // 有2个值相同节点
     5         ListNode p = head, q = p.next;
     6         List<ListNode> noRepeat = new ArrayList<>();
     7         if (p.val != q.val) {
     8             noRepeat.add(p);
     9         }
    10         // 扫一遍将不重复的数字记录下来
    11         while (q != null){
    12             if (p.val != q.val && q.next != null && q.val != q.next.val)
    13                 noRepeat.add(q);
    14             if (q.next == null && p.val != q.val){
    15                 noRepeat.add(q);
    16             }
    17             p = p.next;
    18             q = p.next;
    19         }
    20         for (int i = 0; i < noRepeat.size()-1; i++){
    21             noRepeat.get(i).next = noRepeat.get(i+1);
    22         }
    23         if (noRepeat.size() <= 0)
    24             return null;
    25         noRepeat.get(noRepeat.size()-1).next = null;
    26         return noRepeat.get(0);
    27     }
    28 
    29     public static ListNode create(int[] elems){
    30         if (elems == null) return null;
    31         ListNode head = new ListNode(-1);
    32         ListNode p = head;
    33         for (int e : elems){
    34             ListNode listNode = new ListNode(e);
    35             listNode.next = null;
    36             p.next = listNode;
    37             p = p.next;
    38         }
    39         return head.next;
    40     }
    41 
    42     public static void main(String[] args) {
    43         int[] elems = {1,1,1,2,2,3,3,4,5,6,7};
    44         ListNode head = create(elems);
    45         ListNode listNode = new _82().deleteDuplicates(head);
    46         System.out.println();
    47         while (listNode != null) {
    48             System.out.print(listNode.val+", ");
    49             listNode = listNode.next;
    50         }
    51     }
    52 }
  • 相关阅读:
    魅族Java面经
    笔试常考的Java基础
    笔试常考的Linux命令大全
    Spring概念
    Java三大框架的配置
    Myeclipse的使用
    项目经验
    Android四大组件及activity的四大启动模式
    java基础
    IT在线笔试总结(二)
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11545714.html
Copyright © 2011-2022 走看看