在O(1)时间删除链表节点
来源:互联网 发布:研发生产销售 知乎 编辑:程序博客网 时间:2024/04/19 21:08
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。
思路:题目要求的时间复杂度,迫使我们不得不,开拓思维,另辟蹊径。
代码:
#include<iostream>using namespace std;typedef struct ListNode{int value;ListNode* next;} lnode,*plnode;plnode head;plnode todel;void delNode(plnode head,plnode todel){if(!head||!todel) return;if(todel->next!=NULL){plnode pNext=todel->next;todel->value=pNext->value;todel->next=pNext->next;delete pNext;pNext=NULL;}else if(head==todel){delete todel;todel=NULL;head=NULL;}else{plnode pNode=head;while(pNode->next!=todel) pNode=pNode->next;pNode->next=NULL;delete todel;todel=NULL;}}void prtNode(plnode head){plnode node=head;while(node!=NULL){cout<<node->value<<" ";node=node->next;}cout<<endl;}void crelist(){head=new lnode;head->value=0;head->next=NULL;int i;plnode p;plnode q=head;for(i=1;i<5;i++){p=new lnode;p->value=i;q->next=p;p->next=NULL;q=p;}todel=p;}int main(){crelist();cout<<"before delete"<<endl;prtNode(head);delNode(head,todel);cout<<"after delete"<<endl;prtNode(head);return 0;}
reference:剑指Offer(何海涛著)
0 0
- 在O(1)时间删除链表节点
- 在O(1)时间删除链表节点
- 在O(1)时间删除链表的节点
- 在O(1时间删除链表节点
- 在O(1)时间删除链表节点
- 剑指offer13-在O(1)时间删除链表节点
- 在O(1)时间删除链表节点
- 题目:在O(1)时间复杂度删除链表节点
- LintCode-在O(1)时间复杂度删除链表节点
- lintcode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间删除链表节点
- LintCode:在O(1)时间复杂度删除链表节点
- LintCode_372_在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间删除链表节点13
- HDU1879继续畅通工程
- ALSA架构简介
- MyEclipse安装插件的几种方法
- MeshLab源码编译 vs2010+win7 64bit
- 【数据结构】栈应用之进制转换
- 在O(1)时间删除链表节点
- MongoDB资料汇总专题
- spring 配置junit 启动时出现 ClassNotFound警告
- 从图片文件夹下读取图片并写入AVI视频
- nginx rewrite中last和break的区别
- kalman以及雅克比矩阵
- sql 分组后取第一条
- 黑龙江列车脱线致15人受伤 乘务员砸窗疏散旅客
- Qt开发之多视图架构