剑指offer | 训练题55:删除链表中重复的结点

来源:互联网 发布:淘宝卖家怎么搞到发票 编辑:程序博客网 时间:2024/06/07 04:06

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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)    {        //首先处理边界,只有0个或者1个节点,就返回        if(pHead == NULL || pHead->next == NULL) return pHead;        //用递归        ListNode* p;        if ( pHead->next->val==pHead->val){            p=pHead->next->next;             while (p != NULL && p->val==pHead->val)                p=p->next;            return deleteDuplication(p);                              }                 else {            p=pHead->next;            pHead->next=deleteDuplication(p);            return pHead;        }       }};
原创粉丝点击