fizzbuzz/linked-list-and-binary-sear.../LinkedList.h

119 lines
2.9 KiB
C++
Executable File

#ifndef CS240_LINKED_LIST_H
#define CS240_LINKED_LIST_H
#include <string>
//! LLNode implements a doubly-linked list node
class LLNode {
friend class LinkedList; //!< LinkedList can access private members of LLNode
public:
//! Constructor
LLNode(const std::string &, LLNode *, LLNode *);
//! Copy Constructor SHALLOW COPY and does not free memory
//!Feel free to change this function(IE, to a deep copy).
LLNode(const LLNode &);
//! Read-only public methods for use by clients of the LinkedList class
const std::string & GetValue() const;
LLNode * GetPrevious() const;
LLNode * GetNext() const;
//! Assignment operator makes a SHALLOW COPY and does not free memory
//!Feel free to change this function(IE, to a deep copy).
LLNode & operator=(const LLNode &);
private:
std::string value; //!< value stored in the node
LLNode * prev; //!< pointer to previous node in the list
LLNode * next; //!< pointer to next node in the list
};
//! LinkedList implements a doubly-linked list
class LinkedList
{
public:
//! No-arg constructor. Initializes an empty linked list
LinkedList();
//! Copy constructor. Makes a complete copy of its argument
LinkedList(const LinkedList & other);
//! Destructor
~LinkedList();
//! Copy make a DEEP copy. Makes a complete copy of its argument
void Copy(const LinkedList &);
//! Assignment operator. Makes a complete copy of its argument
//! @return A reference to oneself
LinkedList& operator =(const LinkedList & other);
//! @return true if the list is empty, or false if the list is not empty
bool IsEmpty() const;
//! Removes all values from the list
void Clear();
//! @return the number of values in the list
int GetSize() const;
//! @return a pointer to the first node in the list, or NULL if the list is empty
LLNode * GetFirst() const;
//! @returns a pointer to the last node in the list, or NULL if the list is empty
LLNode * GetLast() const;
//! Inserts value v into the list after node n
//!
//! @param v The new value being inserted
//! @param n A node that is already in the list after which the new node should
//! be inserted.
//! If n is NULL, the new node should be inserted at the beginning of the list.
//!
//! @return a pointer to the newly inserted node
LLNode * Insert(const std::string & v, LLNode * n);
//! Searches for the first occurrence of value v that appears in the list
//! after node n
//!
//! @param v The value being searched for
//! @param n The node in the list after which the search should begin.
//! If n is NULL, the list should be searched from the beginning.
//!
//! @return a pointer to the node containing v, or NULL if v is not found
LLNode * Find(const std::string & v, LLNode * n) const;
//! Removes node n from the list
//!
//! @param n The node being removed from the list
void Remove(LLNode * n);
private:
int length;
LLNode * head;
};
#endif