删除有序链表中相同的元素ii

今天写了关于删除有序链表中相同元素的链表题目,自己在算法设计方面确实是很薄弱,算法思路都没有就开始动笔,肯定结果很糟糕,还有一个就是近期是以刷题为主,而且刷题主要是要多多参考别人优秀成熟的代码。

这道题题目很简单,难点在思路和细节上面

思路就是用st指向所有相同数的前一个节点,用指针p来实现遍历,找到所有相同节点以后,用st指向相同节点的后一个节点。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==NULL) return head;
         ListNode *dummy=new ListNode(-1),*p=dummy,*st=NULL;   //dummy指针方便操作,便于比较head和head->next;
         dummy->next=head;
         int t=0;
         while(p->next&&p->next->next){
             if(p->next->val==p->next->next->val){
                 if(t==0)  st=p;                               
                 t=1;
                 p=p->next;}
             else if(t){
             t=0;
             st->next=p->next->next;
             p=st;}                                            //注意此时p指针的指向
             else
             p=p->next;
         }
         if(p->next->next==NULL&&t) st->next=NULL;
         return dummy->next;
    }
};

还有其他几种方法,明天再看。

猜你喜欢

转载自www.cnblogs.com/aaamax/p/12556220.html