Pointers are one of the most powerful and flexible features in C/C++, but they are also one of the most dangerous ones to use. Safe proramming practice requires a pointer to be initialized to NULL once declared. However a NULL pointer does not solve the problem completely. Accessing a NULL pointer may crash the application without offering any useful clues to the real problem. In Object-Oriented design, we can view a NULL pointer as a special kind of object with special behaviors and implement a null object to replace the NULL pointer. Accessing a null object will not crash the application, instead it can perform meaningful operations or display more helpful error messages. In this project, we implement a binary search tree, an AVL tree, a singly linked list using both the traditional NULL pointer method and the Object-Oriented null object method. We then compared the two methods in terms of safety, coding complexity, and time/space efficiency. The implementation language is C++