zoukankan      html  css  js  c++  java
  • 【剑指offer56 删除链表中重复的节点】

    题目描述

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
     
    注意如果是头结点的判断
    另外,每次->next的时候都需要判断当前节点是否为空
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    class Solution {
    public:
        ListNode* deleteDuplication(ListNode* pHead)
        {
        if(!pHead || !pHead->next) return pHead;
         
        ListNode *pre = pHead; //指向前面最晚访问过的不重复结点
        ListNode *left = pHead; //指向当前处理的结点
        ListNode *right = NULL; //指向当前处理结点后面结点
     
        while( left != NULL )
        {
            //当前结点left,(其实是left指向当前结点),与它下一个结点val相同,说明要删掉有这个val的所有结点
            if( left->next && left->next->val == left->val )
            {
                right = left->next;
                //找到最后一个需要删除的节点 right
                while( right && right->next && right->next->val == left->val )
                {
                    right = right->next;
                }
     
                //如果left指向链表中第一个元素,left -> ... -> right ->... ,  将指向链表第一个元素的指针pHead指向right->next。
                if( left == pHead )
                {
                    pHead = right->next;
                }
                else//如果left不指向链表中第一个元素,head -> pre->left ->...->right ->... 即pre->next = right->next
                {
                    pre->next = right?right->next:NULL;
                }
                //当前处理的left要更新
                left = right->next; //即pre->next
            }
            else //left下一个和left不相同
            {
                pre = left;
                left = pre->next; //一定不能写成right->next
            }
        }
        return pHead;
        }
    };
  • 相关阅读:
    微信app支付,服务端对接
    git 忽略文件权限
    linux 终端全局代理设置
    centos 谷歌浏览器安装
    putty快速设置本地代理
    centos rpmforge repo
    mysql 同步
    apscheduler 排程
    tornado 排程
    gedit 格式化json
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13137675.html
Copyright © 2011-2022 走看看