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;//返回链表的头(不带头结点)
        }
  • 相关阅读:
    高性能JavaScript
    高性能CSS
    去掉超链接文字点击后的灰色框
    高性能HTML
    css整站规划
    css hack 和问题
    IE6支持min-width、max-width CSS样式属性
    WPF草稿
    正则表达式学习日记zz
    详解Adorner Layer(zz)
  • 原文地址:https://www.cnblogs.com/wft1990/p/7451498.html
Copyright © 2011-2022 走看看