zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    个人技术总结——Flask-Admin扩展
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    计算与软件工程 作业五
    计算与软件工程 作业四
    计算与软件工程 作业三
  • 原文地址:https://www.cnblogs.com/wmx24/p/9448063.html
Copyright © 2011-2022 走看看