题目地址
难度:⭐
题目描述:
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
1 2
| 输入:单向链表a->b->c->d->e->f中的节点c 结果:不返回任何数据,但该链表变为a->b->d->e->f
|
🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️解题过程🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️
解题过程:
思路:
依次把删除节点下一个节点的值赋值给当前节点,也就是说把要删除的节点当做下一个节点,这样把要删除节点后面的链元素依次前移。删除节点不是第一个或最后一个节点,处理特殊情况:删除的是倒数第二个节点因为它下一个节点是最后一个节点,依次调用deleteNode函数,若删除节点是倒数第二个,则直接next指针为NULL,否则递归调用deleteNode函数。
c++代码:(执行用时12ms,击败97.21%,内存消耗8.2M,击败5.84%)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Solution { public: void deleteNode(ListNode* node) { node->val=node->next->val; if(node->next->next){ deleteNode(node->next); }else{ node->next=NULL; } } };
|
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:
没有官方题解,效率应该还行,哈哈哈😉!。