In this lab you are going to implement a linked list that can have objects added to the back and removed from the front.
  The file linked_list.py contains a template for a
  linked list class. It has instance data for references to the first
  and last nodes in the list. These references are of
  type _Node, which is a private sub-class
  of LinkedList. The node class has two instance
  variables, object
  and next. The object instance variable is a is
  a reference to the data stored in the linked
  list. The next instance
  variable is a reference to the next node in the linked
  list. If next is None, then the node is
  the last element in the list.
The LinkedList class contains a method
  stub, add_last, for adding to the linked list. The
  method should add the specified object to the end of the linked
  list. The method should begin by creating a new node
  with object set to the object to add
  and next set to None (because it is the
  end of the list). Next, if the list is empty, it should set the
  first instance variables to reference the new node. If the
  list is not empty, it should walk through the list, until it finds
  the last node in the  list.  You should then update that last
  nodes next to reference the new node. Finally, increment
  the size instance variable.
Before testing the add_last method you will need to be able to print
a linked list. Complete the __str__ method. The method should return
a string that is a concatenation of all of the elements in the linked
list. In order to generate this string you should create a variable
that is initialized to the first node in the list and write a loop
that concatenates a string representation of the object in the current
node to the return string and updates the current node to be the next
node in the list. The loop should terminate when there is no next
element. Write a program that tests both the add_last and the
__str__ methods. Be sure to test the __str__
method on an empty
list as well as a full list.
The LinkedList class is not very useful without the ability to
access objects in the list.  Complete the get_first and
remove_first methods. The get_first method return the object in
the first node in the list without modifying the list.  If the list is
empty, the method should raise an IndexError.  Test the get_first
method before proceeding.
The remove_first method should remove the first element from the
linked list. If the list is empty, the method should raise an
IndexError. If the list contains only one element, the method should
set the first and last references to None. If the list contains
more than one element, the method should set the first reference to
be the second element in the list. Finally, decrement the size
variable. Note, the remove method does not actually delete any
data. It simply changes references such that there are no variables
that reference the deleted node. The Python interpreter keeps track of
how many references there are to objects and deletes objects when the
reference count becomes zero.  Test your remove_first method before
proceeding.
Linked Lists are useful for storing data that can be of arbitrary size. As you are probably aware, integers in Python can be of arbitrary size. This is in spite of the fact that integers in hardware have a fixed size (usually 32 or 64 bits). This is done in software within python. For this portion of the lab, you will implement your own "Big Integer" class, which can represent arbitrarily large integers.
Integers in this class will be implemented as a singly linked list, orders from the least significant digit. So, for the number 12,345 should conceptually look like this:
   
Create a class that represents an arbitrarily large integer. You will want to implement the following methods:
__len__(self) - Returns an integer, the number of digits
  within this number__str__(self) - Returns a String, the number contained
  within the linked list__eq__(self, other) - Returns true if the number
  represented by self is equal to the number represented by other.__add__(self, other) - Returns a new Big Integer,
  the result of adding the number represented by self to the number
  represented by parameter other.Submit a zip file of your code on the course Inquire site that uses your last names as the file name.