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

来源:互联网 发布:linux中的uniq 编辑:程序博客网 时间:2024/06/05 05:34
时间限制:1秒 空间限制:32768K 热度指数:57361

本题知识点: 链表

题目描述

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

方法一:递归

思路:每次递归都判断前两个结点的内容即可,是空就返回,不是空就按是否相等分两种情况,进行下一次递归。

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        if(pHead == NULL || pHead->next == NULL)            return pHead;                if(pHead->val == pHead->next->val)        {            ListNode* p = pHead->next;            while(p && pHead->val == p->val)            {                //ListNode* tmp = p;                p = p->next;               //delete tmp;            }            //delete pHead;//题目没有要求删除数据            return deleteDuplication(p);                   }        else        {                        pHead->next = deleteDuplication(pHead->next);             return pHead;        }    }};

方法二:非递归
思路:先创建一个root结点指向头结点;然后用一个指针p1==root(很关键,因为如果一开始就有重复的数,我们可以通过p1改变root->next);用p2指向pHead。然后,如果有重复的数,就移动p2;完了要判断p2到底移动没有,如果移动了(说明p1和p2之间的数都不能要),那么p2还得再移动到下一个位置,然后令p1->next = p2。如果p2没有移动,那么更新很简单。最后输出root->next。
/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        if(pHead == NULL || pHead->next == NULL)            return pHead;                ListNode *root = new ListNode(0);        root->next = pHead;         ListNode *p1 = root;        ListNode *p2 = root->next;         while (p2)        {            while (p2->next && (p2->next->val == p2->val))                p2 = p2->next;                        if (p1->next != p2)            {                                 p2 = p2->next;                p1->next = p2;            }            else            {                p1 = p2;                p2 = p2->next;            }        }         return root->next;    }};




0 0
原创粉丝点击