LeetCode--Remove Duplicates from Sorted List II

来源:互联网 发布:杭州网络推广营销 编辑:程序博客网 时间:2024/06/05 06:08

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

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

思路:这一题相比上一题的操作复杂很多,看起来就是多删除一个链表元素,但是实现起来并不容易。这里用到了一个指向变量的指针,当头指针移动的时候,用该指针记录头指针的位置。其余操作类似于上一题。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* deleteDuplicates(ListNode* head) {        ListNode *root;        ListNode **ppNext;        ppNext=&root;        while(head){            if(head->next==NULL||head->next->val!=head->val){                *ppNext=head;                ppNext=&(head->next);                head=head->next;            }            else{                int val=head->val;                head=head->next;                while(head&&head->val==val){                    head=head->next;                }            }        }        *ppNext=NULL;        return root;    }};
原创粉丝点击