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

解题思路

由于重复的节点要全部删掉,所以再删除时要先保存重复节点的前一个节点,注意特殊情况是链表的开头就是重复节点,所以应首先找到链表从左往右第一个不重复的节点作为头节点,若头节点不为空,再从其后一个节点开始遍历,如果是重复节点就找到该重复节点后面第一个不重复的节点,并将不重复节点拼接到上一个不重复节点之后,直到链表末尾。

代码

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* deleteDuplicates(ListNode* head) {
12         if(head == NULL) return NULL;
13         ListNode *left = head;
14         while(left && left->next && left->val == left->next->val){
15             int val = left->val;
16             while(left && left->val == val)
17                 left = left->next;
18         }
19         if(left == NULL) return NULL;
20         head = left;
21         ListNode *right;
22         while(left){
23             right = left->next;
24             while(right && right->next && right->val == right->next->val){
25                 int val = right->val;
26                 while(right && right->val == val)
27                     right = right->next;
28             }
29             left->next = right;
30             left = right;
31         }
32         return head;
33     }
34 };

原文地址:https://www.cnblogs.com/wmx24/p/9448063.html

时间: 2024-08-02 06:08:53

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

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著作权归领扣网络所有.商

[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)删除排序链表中的重复元素 个人题解

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 这题思路比较简单,同样是快慢针的思路. 用一个整数类型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

*** 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 83删除排序链表中的重复元素

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode *pre, *cur, *ahead; ahead=pre=n

【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个指针:

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()-