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;
        }
    };
    
  • 相关阅读:
    ASP.NET MVC 动态加载图像
    ASP.NET:以域用户身份访问网络资源
    ASP.NET MVC 动态加载 *.ascx
    4月
    3月
    2月
    每天充点小能量
    每天进步一点点
    FreeMarker标签与使用
    eclipse启动tomcat, http://localhost:8080无法访问
  • 原文地址:https://www.cnblogs.com/flix/p/12577212.html
Copyright © 2011-2022 走看看