school/cs235/lab05/linkedlist.cpp
2016-04-06 20:46:10 -07:00

103 lines
2.2 KiB
C++

#include "linkedlist.h"
linkedlist::linkedlist(): head(NULL) {}
linkedlist::~linkedlist(){clear();}
void linkedlist::insertHead(int id) {
head = new node(id, head);
}
void linkedlist::insertTail(int id) {
if(head == NULL) {
insertHead(id);
return;
}
node* node_ptr = head;
while(node_ptr != NULL) {
if(node_ptr->next == NULL) {
node_ptr->next = new node(id, NULL);
break;
}
node_ptr = node_ptr->next;
}
}
void linkedlist::insertAfter(int id, int insertionNode) {
node* node_ptr = head;
while(node_ptr != NULL) {
if(node_ptr->id == insertionNode) {
node* temp = new node(id, NULL);
temp->next = node_ptr->next;
node_ptr->next = temp;
}
node_ptr = node_ptr->next;
}
}
void linkedlist::remove(int id) {
node* node_ptr = head;
if(node_ptr->id == id) {
node* ptr = head;
head = head->next;
delete ptr;
return;
}
while(node_ptr != NULL) {
if(node_ptr->next == NULL)
return;
if(node_ptr->next->id == id) {
node* ptr = node_ptr->next;
node_ptr->next = node_ptr->next->next;
delete ptr;
}
node_ptr = node_ptr->next;
}
}
void linkedlist::clear() {
node* node_ptr = head;
while(head) {
node_ptr = head;
head = head->next;
delete node_ptr;
}
}
int linkedlist::at(int index) {
if(index < 0) {
return -1;
}
if(size() <= index) {
return -1;
}
node* node_ptr = head;
for(int i = 0; i < index; i++){
node_ptr = node_ptr->next;
}
if(head == NULL)
return -1;
return node_ptr->id;
}
int linkedlist::size() {
int size_of_list = 0;
if(head == NULL) {
return 0;
}
node* node_ptr = head;
while(node_ptr != NULL) {
size_of_list++;
node_ptr = node_ptr->next;
}
return size_of_list;
}
ostream & operator<<(ostream & os, linkedlist & f) {
node* node_ptr = f.head;
while(node_ptr != NULL) {
os << node_ptr->id << ",";
node_ptr = node_ptr->next;
}
return os;
}