剑指offer 删除链表中重复的结点

来源:互联网 发布:精彩返奖统计软件 编辑:程序博客网 时间:2024/05/18 03:32

题目描述

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

思路1:当前节点值与下一节点值进行比较,如果重复,则直到找到不重复的节点,然后将节点添加到没有重复的开始节点之后。

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        // 新建一个头结点    ListNode *first = new ListNode(-1);         first->next = pHead;        ListNode *p = pHead;        ListNode *last = first;        while (p != NULL && p->next != NULL)        {            //  如果有元素重复            if (p->val == p->next->val)            {                //  就跳过所有重复的数字                int val = p->val;                while (p != NULL && p->val == val)                {                    p = p->next;                }                last->next = p;            }            else            {                last = p;                p = p->next;            }        }        return first->next;    }};






0 0