// LList.cpp #include "LList.h" LList::LList() { head_ = NULL; size_ = 0; } ListNode* LList::_find(size_t position) { ListNode *node = head_; size_t i; for (i=0; ilink_; } return node; } ItemType LList::_delete(size_t position) { ListNode *node, *dnode; ItemType item; if (position == 0) { dnode = head_; head_ = head_->link_; item = dnode->item_; delete dnode; } else { node = _find(position - 1); if (node != NULL) { dnode = node->link_; node->link_ = dnode->link_; item = dnode->item_; delete dnode; } } size_ -= 1; return item; } void LList::append(ItemType x) { ListNode *node, *newNode = new ListNode(x); if (head_ != NULL) { node = _find(size_ - 1); node->link_ = newNode; } else { head_ = newNode; } size_ += 1; } void LList::insert(size_t i, ItemType x) { ListNode *node; if (i == 0) { head_ = new ListNode(x, head_); } else { node = _find(i - 1); node->link_ = new ListNode(x, node->link_); } size_ += 1; } ItemType LList::pop(int i) { if (i == -1) { i = size_ - 1; } return _delete(i); } ItemType& LList::operator[](size_t position) { ListNode *node; node = _find(position); return node->item_; } LList::LList(const LList& source) { copy(source); } void LList::copy(const LList &source) { ListNode *snode, *node; snode = source.head_; if (snode) { node = head_ = new ListNode(snode->item_); snode = snode->link_; } while (snode) { node->link_ = new ListNode(snode->item_); node = node->link_; snode = snode->link_; } size_ = source.size_; } LList& LList::operator=(const LList& source) { dealloc(); copy(source); } LList::~LList() { dealloc(); } void LList::dealloc() { ListNode *node, *dnode; node = head_; while (node) { dnode = node; node = node->link_; delete dnode; } }