LintCode 113:Remove Duplicates from Sorted List II

来源:互联网 发布:太原科大网络 编辑:程序博客网 时间:2024/05/16 16:15

Description:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.


Note:

1.由于重复的结点全要删掉,所以使用一个int变量num记录当前判断是否有重复的结点,numNode指向这个结点。当出现重复结点时,若numNode不为空,则删除他的内容,若numNode为空,则只用删除当前重复节点(nextNode)。

2.当head为要删除的结点时,重置head指针为nextNode->next并删除nextNode结点。

3.当当前结点(nextNode)不等于num值时,有两种情况:

 numNode为空,则置numNode=nextNode,更新num值,nextNode后移一格。

 numNode不为空,则preNode,numNode,nextNode全都后移一格,更新num值。


Code:

class Solution {public:    /*     * @param head: head is the head of the linked list     * @return: head of the linked list     */    ListNode * deleteDuplicates(ListNode * head) {        // write your code here        if(!head)            return nullptr;        int num=head->val;        ListNode* preNode=nullptr;        ListNode* numNode=head;        ListNode* nextNode=head->next;        while(nextNode){            if(num==nextNode->val){                if(numNode){                    delete numNode;                    numNode=nullptr;                }                if(preNode){                    preNode->next=nextNode->next;                    delete nextNode;                    nextNode=preNode->next;                }                else{                    head=nextNode->next;                    delete nextNode;                    nextNode=head;                }            }            else{                if(numNode){                    preNode=numNode;                }                numNode=nextNode;                num=numNode->val;                nextNode=nextNode->next;            }        }        return head;    }};



阅读全文
0 0