zoukankan      html  css  js  c++  java
  • 删除链表中重复的节点

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

    数据结构及初始化:

    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };

    代码如下:

    ListNode* deleteDuplication(ListNode* pHead)
        {
            if(pHead==NULL)
                return NULL;
            ListNode *head=new ListNode(-1);//创建一个头结点,防止头结点被删除
            head->next=pHead;//创建的头结点初始化
            ListNode *pre=head;//两个操作指针pre和p
            ListNode *p=head->next;
            while(p&&p->next)
            {
                if(p->val==p->next->val)//如果p指向的值和p->next指向的值相同
                {
                    int val=p->val;//保留当前的值,因为下面p会移动
                    while(p&&p->val==val)
                        p=p->next;
                    pre->next=p;//此时是p指向的值和val不相同,则让pre->next=p;间接删除了重复的节点
                }
                else//出现p指向的值和下一个值不相同,移动pre和p
                {
                    pre=p;
                    p=p->next;
                }
                
            }
            return head->next;//返回链表的头(不带头结点)
        }
  • 相关阅读:
    POJ 3126 Prime Path
    POJ 2429 GCD & LCM Inverse
    POJ 2395 Out of Hay
    【Codeforces 105D】 Bag of mice
    【POJ 3071】 Football
    【POJ 2096】 Collecting Bugs
    【CQOI 2009】 余数之和
    【Codeforces 258E】 Devu and Flowers
    【SDOI 2010】 古代猪文
    【BZOJ 2982】 combination
  • 原文地址:https://www.cnblogs.com/wft1990/p/7451498.html
Copyright © 2011-2022 走看看