zoukankan      html  css  js  c++  java
  • 82. Remove Duplicates from Sorted List II

    问题描述:

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

    Example 1:

    Input: 1->2->3->3->4->4->5
    Output: 1->2->5
    

    Example 2:

    Input: 1->1->1->2->3
    Output: 2->3

    解题思路:

    对每一个节点,我们简要检查它是否是一个存在重复的节点,是的话,将指针指向与它值不同的第一个节点,并将它的前一个指针指向它。

    我们用到了两个指针:

      1.pre: 记录前一个指针

      2.p:记录现在的指针

    在检查p是否是有重复的节点时,我们用了cur来循环

    需要注意的是,若一开始就是重复的节点,我们也需要移动头节点。

    将头节点移动到第一个值不为原值的节点并检查这个节点

    代码:

    /**
     * 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) {
            if(!head)
                return head;
            ListNode* pre = head;
            ListNode* p = head;
            while(p){
                ListNode* cur = p->next;
                while(cur && (cur->val == p->val)){
                    cur = cur->next;
                }
                if(cur != p->next){
                    if(p->val == head->val){
                        head = cur;
                        pre = cur;
                        p = cur;
                    }else{
                        pre->next = cur;
                        p = cur;
                    }
                }else{
                    pre = p;
                    p = cur;
                }
            }
            return head;
        }
    };
  • 相关阅读:
    Python开发【第六篇】循环语句
    Python开发【第四篇】语句与函数
    Python开发【第三篇】数据类型
    Python开发【第二篇】:初始Python
    2019-10-11入博客第一篇文章
    vim学习2-文档编辑
    vim学习1-入门指令
    linux学习9-进程管理知识
    linux学习8-正则表达式基础
    linux学习7-数据流重定向
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9162102.html
Copyright © 2011-2022 走看看