zoukankan      html  css  js  c++  java
  • 【剑指Offer-代码的完整性】面试题18.2:删除链表中的重复节点

    题目描述

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

    思路

    用一个指针pre指向重复子链表的第一个节点的前一个节点,用另一个指针指向重复子链表的最后一个节点cur,这样遇到重复节点,使pre->next=cur->next就能把重复节点全部删除。因为整个链表都可能是重复的,所以需要一个指针指向头节点。代码如下:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    class Solution {
    public:
        ListNode* deleteDuplication(ListNode* pHead){
            if(pHead==nullptr || pHead->next==nullptr)
                return pHead;
            
            ListNode* head = new ListNode(-1);
            head->next = pHead;
            ListNode* pre = head;
            ListNode* cur = pHead;
            while(cur!=nullptr){
                if(cur->next!=nullptr && cur->val==cur->next->val){
                    while(cur!=nullptr && cur->next!=nullptr && cur->val==cur->next->val){
                        cur = cur->next;
                    }
                    pre->next = cur->next;
                    cur = cur->next;
                }
                else{
                    pre = pre->next;
                    cur = cur->next;
                }
            }
            return head->next;
        }
    };
    
  • 相关阅读:
    GIT和SVN之间的五个基本区别
    IOS多线程(NSThread,NSOperation,Grand Central Dispatch)
    MV*模型及部分vue
    你未必知道的49个CSS知识点--(转发地址)
    VUE增删改查
    动态树形菜单的几种递归写法小结
    vue-cli
    git的使用
    自动化构建工具----gulp
    前端包管理工具—bower
  • 原文地址:https://www.cnblogs.com/flix/p/12577212.html
Copyright © 2011-2022 走看看