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

Posted yfs123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

 

以上是关于leetcode 82. 删除排序链表中的重复元素 II的主要内容,如果未能解决你的问题,请参考以下文章

leetcode(82)---删除排序链表中的重复元素(双指针)

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

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

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

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

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