zoukankan      html  css  js  c++  java
  • 剑指Offer-56.删除链表中重复的结点(C++/Java)

    题目:

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    分析:

    递归思路,如果当前结点和它的next结点的val值不同,则当前结点可以直接接到已处理完的结点后,继续删除重复的过程;如果当前结点和它的next结点的val值相同,则需要继续遍历,直到找到一个与当前结点val不同的结点作为新链表的头结点,如果找不到,说明链表所有结点元素都一样,新链表为NULL,否则从新的头结点出发,继续删除重复的过程。

    非递归思路,新建一个虚拟头结点,若当前结点和它的next结点的val值不同,意味着不是重复结点,可以加入到已处理完的结点后,若相同,需要找到一个与当前结点不同的结点,再重新判断。注意遍历结束后要把最后的当前结点加入到处理完结点之后。

    程序:

    C++

    class Solution {
    public:
        ListNode* deleteDuplication(ListNode* pHead)
        {
            if(pHead == nullptr || pHead->next == nullptr)
                return pHead;
            if(pHead->val != pHead->next->val){
                pHead->next = deleteDuplication(pHead->next);
                return pHead;
            }
            else{
                ListNode* p = pHead;
                while(p != nullptr && p->val == pHead->val)
                    p = p->next;
                return deleteDuplication(p);
            }
        }
    };
    class Solution {
    public:
        ListNode* deleteDuplication(ListNode* pHead)
        {
            if(pHead == nullptr || pHead->next == nullptr)
                return pHead;
            ListNode* dummyHead = new ListNode(0);
            ListNode* p = dummyHead;
            ListNode* curr = pHead;
            while(curr != nullptr && curr->next != nullptr){
                if(curr->val != curr->next->val){
                    p->next = curr;
                    p = p->next;
                }
                else{
                    while(curr->next != nullptr && curr->val == curr->next->val)
                        curr = curr->next;
                }
                curr = curr->next;
            }
            p->next = curr;
            return dummyHead->next;
        }
    };

    Java

    public class Solution {
        public ListNode deleteDuplication(ListNode pHead)
        {
            if(pHead == null || pHead.next == null)
                return pHead;
            if(pHead.val != pHead.next.val){
                pHead.next = deleteDuplication(pHead.next);
                return pHead;
            }
            else{
                ListNode p =  pHead;
                while(p != null && p.val == pHead.val)
                    p = p.next;
                return deleteDuplication(p);
            }
        }
    }
  • 相关阅读:
    mysql架构~Orch生产环境部署具体参数
    mysql架构~Orch生产环境部署准备
    iOS苹果内购漏单处理
    iOS13 深色模式与浅色模式适配讲解
    【iOS】音频播放之AVAudioPlayer,AVPlayer,AVQueuePlayer
    iOS 内购遇到的坑
    关于ios平台下的app的充值规则:
    IAP内购审核时注意点和遇到的坑
    PyTorch implementation of the Social-NCE applied to Trajectron++.
    Code accompanying the ECCV 2020 paper "Trajectron++: Dynamically-Feasible Trajectory Forecasting With Heterogeneous Data"
  • 原文地址:https://www.cnblogs.com/silentteller/p/12110217.html
Copyright © 2011-2022 走看看