O(1)时间删除节点

来源:互联网 发布:如何查询淘宝信用 编辑:程序博客网 时间:2024/05/29 15:56
//主要是函数中链表节点的形参最好用引用,这样函数中指针赋值为空时,才真正的把指针赋值为空了。
#include <iostream>using namespace std;struct ListNode{int value;ListNode* next;ListNode(int m,ListNode* p):value(m),next(p){}};class Solution {public:const void Print( ListNode * & head){if(head==NULL){cout<<"empty"<<endl;return;}ListNode* tmp=head;while(tmp!=NULL){cout<<"  "<<tmp->value;tmp=tmp->next;}}void Delete(ListNode*& head,ListNode* &deleted){if(!head || !deleted)return;if(deleted->next!=NULL){ListNode* tmp=deleted->next;deleted->value=tmp->value;deleted->next=tmp->next;delete tmp;tmp=NULL;}else if(deleted==head){delete deleted;deleted=NULL;head=NULL;}else{ListNode* node=head;while(node->next!=deleted)node=node->next;node->next=deleted->next;delete deleted;deleted=NULL;}return;}};int main(){ListNode* p1=new ListNode(1,NULL);ListNode* p2=new ListNode(2,p1);//ListNode* p3=new ListNode(3,p2);//ListNode* p4=new ListNode(4,p3);//ListNode* p5=new ListNode(5,p4);Solution s;s.Delete(p2,p1);s.Print(p2);if(p1==NULL)cout<<"p1 delete"<<endl;}

原创粉丝点击