上午刷题时,之前一道很简单的题写第二遍时卡住了。。。看来还是没理解透彻,题目为剑指Offer(五十六):删除链表中重复的结点。
心得:
- 先考虑一般情况1->2->3->3->4->4->5 处理后为 1->2->5;
- 再考虑要删除的是第一个结点的情况(需要移动头节点)1->1->2->3->3->5 处理后为 2->5;
- 最后考虑遍历到最后指针为空的情况,1->1->1->1 处理后为 {}。
coding就是一个思路转化成代码的过程,逻辑要清晰,善于用三种逻辑语句,卡在都想用pre = cur;cur = aft;语句来继续遍历,但如果删除重复后其实pre是不用移动的,遂if else考虑后清晰很多,if(删除重复)用cur = aft->next;,else。
1 | /* |
类比删除值为x的元素
printList函数见(https://mintlucas.github.io/2019/02/26/C-%E7%AE%80%E6%B4%81%E7%9A%84%E9%93%BE%E8%A1%A8%E5%88%9B%E5%BB%BA/)
1 | void deleteX(ListNode* &head, int x){ |