给定一个排序的链表,删除所有具有重复数字的节点,从原始列表中只留下不同的数字。

来源:互联网 发布:淘宝支付宝登陆界面 编辑:程序博客网 时间:2024/06/10 05:40

思路1:

新建一个头节点,值为头节点值-1.如果当前节点有重复,就删除节点指直到不重复的,将当前节点的前一个节点的指针指向不重复的,保持链表不断。

    ListNode *deleteDuplicates(ListNode *head) {        if(head==NULL||head->next==NULL)            return head;        ListNode* p=head;        int x=p->val-1;        ListNode* root=new ListNode(x);        root->next=head;        ListNode* pre=root;        while(p&&p->next){            if(p->val!=p->next->val){                pre=p;            }else{                while(p->next&&p->val==p->next->val)                    p=p->next;                pre->next=p->next;            }            p=p->next;        }        return root->next;    }
思路二:

    ListNode *deleteDuplicates(ListNode *head) {        if(head==NULL||head->next==NULL)            return head;        ListNode* p;        int x=p->val-1;        ListNode* root=new ListNode(x);        root->next=head;        ListNode* pre=root;        while(pre->next&&pre->next->next){    //从头节点遍历,            if(pre->next->val==pre->next->next->val){                p=pre->next->next->next;   //删除后面重复的所有节点                while(p&&p->val==pre->next->val)                    p=p->next;                pre->next=p;   //保证链表不断            }else{                pre=pre->next;            }        }        return root->next;    }


阅读全文
0 0