首页 > 代码库 > 20120918-双向链表类定义《数据结构与算法分析》
20120918-双向链表类定义《数据结构与算法分析》
将新的节点插入双向链表的时候:
iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点 { Node *p = itr.current; theSize++; return iterator(p->prev = p->prev->next = new Node(x,p->prev,p)); }
LIST类的删除节点的过程:
//删除双向链表中的一个节点 iterator erase(iterator itr) { Node *p = itr.current; iterator retVal(p->next); p->prev->next=p->next; p->next->prev=p->prev; delete p; theSize--; return retVal; } iterator erase(iterator start,iterator end) { for(iterator itr = from;itr != to; ) itr = erase(itr); return to; }
传递给erase insert的迭代器可能没有初始化 或者 这个迭代器是错误的表达,因此需要一个检测:
protected: const List<Object> *theList; Node *current; const_iterator(const List<Object> & lst,Node *p): theList(&lst),current(p)‘ { } void assertIsValid() const { if(theList == NULL || current == NULL || current == theList->head) throw IteratorOutOfBoundsException(); }
带有附加错误检测的insert类:
iterator insert(iterator itr.const Object & x) { itr.assertIsValid(); if(itr.theList !=this) throw IteratorMismatchException(); Node *p = itr.current; theSize++; return iterator(*this,p->prev=p->prev->next=new Node (x,p->prev,p)); }
20120918-双向链表类定义《数据结构与算法分析》
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。