本文共 1059 字,大约阅读时间需要 3 分钟。
要注意这个链表的第一个元素也有可能被删除掉 所以加了一个空的前驱指针
#includeusing namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head||!head->next) return head; ListNode* ptrnull=new ListNode(0); ptrnull->next=head; ListNode* pre;//前驱指针 指向满足条件的最后一个元素 ListNode* scan;//指向正在扫描的元素 pre=ptrnull; scan=head; while(scan) { int count=0;//记录有几个元素和scan中的元素相同 ListNode *temp=scan->next; while(temp&&temp->val==scan->val) { count++; temp=temp->next; }//循环结束后 temp指向和scan不同的元素 或者为空 if(count>0)//删除重复元素 将scan指向下面一个要扫描的元素 { pre->next=temp; scan=temp; } else//count==0 不存在要删除的元素 则更新pre指针和 scan 指针 { pre=scan; scan=temp; } } return ptrnull->next; }};
转载地址:http://jhked.baihongyu.com/