今天写了关于删除有序链表中相同元素的链表题目,自己在算法设计方面确实是很薄弱,算法思路都没有就开始动笔,肯定结果很糟糕,还有一个就是近期是以刷题为主,而且刷题主要是要多多参考别人优秀成熟的代码。
这道题题目很简单,难点在思路和细节上面
思路就是用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; } }; 还有其他几种方法,明天再看。
原文地址:https://www.cnblogs.com/aaamax/p/12556220.html
时间: 2024-10-13 04:55:01