【剑指offer系列】 在O(1)时间删除链表节点___13
2016-04-07 15:36
211 查看
题目描述:
给定一个单链表的头节点指针和一个节点指针,在O(1)时间删除该节点
分析:
要删除单链表的一个节点,正常的操作应是找到待删除节点的前驱节点,然后prev-next=toDel->next,再删除该节点
但是本题时间复杂度要求是O(1),因此不能遍历链表去找到目标节点的前驱。只能考虑将next节点的值赋给该节点,然后删除next节点,也就是”懒删除“。
但是如果要删除的节点为链表的尾部节点,那么还是需要遍历找到前驱。
代码:
给定一个单链表的头节点指针和一个节点指针,在O(1)时间删除该节点
分析:
要删除单链表的一个节点,正常的操作应是找到待删除节点的前驱节点,然后prev-next=toDel->next,再删除该节点
但是本题时间复杂度要求是O(1),因此不能遍历链表去找到目标节点的前驱。只能考虑将next节点的值赋给该节点,然后删除next节点,也就是”懒删除“。
但是如果要删除的节点为链表的尾部节点,那么还是需要遍历找到前驱。
代码:
void deleteNode(listNode *head,listNode *toDel){ if(head==NULL||toDel==NULL) return; if(head==toDel){ //待删除为头节点 head=head->next; delete toDel; }else if(toDel->next==NULL){ //待删除为尾部节点 listNode *p=head; while(p&&p->next!=toDel){ p=p->next; } p->next=toDel->next; delete toDel; }else{ //待删除为中间节点 listNode *next=toDel->next; toDel->val=next->val; toDel->next=next->next; delete next; } }
相关文章推荐
- 利用请求头Referer防止盗链
- JavaScript字符串转数字
- 6.9.1.1 qmgr_defer_todo:为延迟邮件清理待发送收件人列表
- 6.9.1 qmgr_ defer.c:销毁活动数据
- CSS 制作三角形原理剖析
- css选择器总结
- 多层json解析
- hadoop SecondNamenode
- (OK) VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题
- 剑指Offer——翻转英文句子中的单词顺序
- javascript 之闭包详解
- react-native-闪屏页
- 剑指offer:二叉树的下一个结点
- 理解 Javascript 的闭包
- 样式设置
- 【剑指offer系列】 打印1到最大的n位数___12
- javascript闭包详解
- php的date对象与javascript的Date对象区别
- 通过原生js添加div和css
- AngularJs 过滤器