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 }

原文地址:https://www.cnblogs.com/yfs123456/p/11545714.html

时间: 2024-10-06 02:24:59

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

LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)

题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例 2: 输入: 1->1->1->2->3 输出: 2->3 解题思路 由于重复的节点要全部删掉,所以再删除时要先保存重复节点的前一个节点,注意特殊情况是链表的开头就是重复节点,所以应首先找到链表从左往右第一个不重复的节点作为头节点,若头节点不为

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

ListNode *deleteDuplicates(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode prehead(-1); prehead.next = head; head = &prehead; ListNode *left, *right; while (head->next) { left = head->next; right = left;

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

1.无重复字符的最长子串 这题需要用到滑动窗口法,有许多问题都可以考虑使用滑动窗口法:https://www.geeksforgeeks.org/tag/sliding-window/ 因为用c++,所以用到set容器:std::count 2.删除排序链表中的重复元素II 3.加一 1 class Solution { 2 public: 3 vector<int> plusOne(vector<int>& digits) { 4 int n=digits.size()-

[leetcode] 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 链表操作 class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null) return head; if (head.next == null) return head; ListNode now = head.next; ListNode last = head; while (now != null) { while (now != null &&

【Leetcode】删除排序链表中的重复元素

题目链接:删除排序链表中的重复元素 题意:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 题解:这个的上一题是也是删除排序链表的重复元素,不过元素都删掉..在剑指offer里也有做过.可以看链接. 这个就是在上个题的基础上做一点修改.最后更新节点时,直接指向这个重复节点的最后一个节点.而不是它的下一个. 代码: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * L

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

题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 做这题之前,可以先做删除排序链表中的重复元素,题解. 思路 这题是<剑指Offer>上的一道题.我们需要保存3个指针:

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

题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例1 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例2 输入: 1->1->1->2->3 输出: 2->3 思路 新建新链表,创建newHead以及newCurrent分别是新链表的头部节点以及记录新链表当前值 创建原链表pre指向虚拟头节点,以及current记录当前访问的值还有nextCurrent

力扣(LeetCode)删除排序链表中的重复元素 个人题解

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 这题思路比较简单,同样是快慢针的思路. 用一个整数类型val对应最新的只出现过一次的那个值, 如果节点的下一个节点的值和这个对应则不做别的操作,快针进入下一个, 如果不对应则接到慢针对应的节点上,同时快针慢针都向前一位,整数val设置为新的值,以此类推. 代码如下: 1 class Solution { 2 public ListNode deleteDuplicates(ListNode head) { 3 if (head ==

leetcode 83. 删除排序链表中的重复元素(Remove Duplicates from Sorted List)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 解法: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo