在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
原创粉丝点击