轻量级前端框架助力开发者提升项目效率与性能
651
2022-11-19
剑指Offer——JZ56.删除链表中重复的结点【前驱后继指针】
题目传送门
题解
注意重复的结点一个也不保留因为第一个结点也可能是重复的,所以预先创建一个头,方便代码书写,更美观。
AC-Code
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(!pHead) return NULL; ListNode* rHead = new ListNode(-1); rHead->next = pHead; ListNode* pre = rHead; ListNode* now = pHead; while(now) { if(now->next && now->next->val == now->val) { // 当前节点有重复 ListNode* pnxt = now->next; while(pnxt && pnxt->val == now->val) // 跳过重复 pnxt = pnxt->next; pre->next = pnxt; // pre跳过重复,直接指向下一个。 now = pnxt; // 更新待判断结点,注意,这里pre不能更新,因为now可能也是重复结点 } else { // 正常遍历即可 pre = now; now = now->next; } } return rHead->next; }};
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~