zoukankan      html  css  js  c++  java
  • 剑指Offer——删除链表中重复的结点

    Question

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

    Solution

    • 链表的题目一般都会考虑用一个额外的节点,因为第一个节点可能重复了,那么会被删除,重复的节点需要全部删除,那么需要设置一个先前节点的指针。然后把思路理清楚,就可以得到正确答案了。

    Code

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    class Solution {
    public:
        ListNode* deleteDuplication(ListNode* pHead) {
    		if (pHead == NULL)
                return pHead;
            
            ListNode* first = new ListNode(-1);
            first->next = pHead;
            
            ListNode* pre = first;
            while (pHead) {
                ListNode* tmp = pHead;
                while (tmp->next != NULL && tmp->val == tmp->next->val)
                    tmp = tmp->next;
                if (tmp == pHead) {
                    pre = pHead;
                    pHead = pHead->next;
                }
    
                if (tmp != pHead && tmp != NULL) {
    				pre->next = tmp->next;
                    pHead = pre->next;
                }
            }
            
            return first->next;
        }
    };
    
  • 相关阅读:
    socket通信简介
    存储过程多次遍历
    js动态表格笔记
    Java excel导出笔记
    Eclipse快捷键
    oracle表,视图,存储过程,函数,序列.....查询
    Java基础笔记
    Active MQ学习笔记
    linux svn
    html中submit和button的区别
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7100621.html
Copyright © 2011-2022 走看看