aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChanin Timbal <[email protected]>2024-06-08 12:13:18 -0700
committerChanin Timbal <[email protected]>2024-06-08 12:13:18 -0700
commit4dd513935776a7598024fabf57cd003600c887b2 (patch)
tree619072de1a93d281fdd95edaf3f31d7c62e0c296
parentAdded RemoveLast function and its unit test (diff)
downloadhomework-1-chaninnohea-4dd513935776a7598024fabf57cd003600c887b2.tar.xz
homework-1-chaninnohea-4dd513935776a7598024fabf57cd003600c887b2.zip
Completed Functions and Unit tests for Prepend, Insert Before, Insert Afterm Remove Last, and Clear
-rw-r--r--CST 126/Homework_3/SinglyLinkedList.hpp75
-rw-r--r--CST 126/UnitTests/UnitTests.cpp93
2 files changed, 168 insertions, 0 deletions
diff --git a/CST 126/Homework_3/SinglyLinkedList.hpp b/CST 126/Homework_3/SinglyLinkedList.hpp
index 1b47d99..75f9530 100644
--- a/CST 126/Homework_3/SinglyLinkedList.hpp
+++ b/CST 126/Homework_3/SinglyLinkedList.hpp
@@ -100,4 +100,79 @@ bool RemoveLast(SinglyLinkedList* list) {
return true;
}
+
+bool InsertAfter(SinglyLinkedList* list, ListNode* nodeBefore, ListNode* nodeToInsert)
+{
+ if (list->_size == 0)
+ return false;
+
+ ListNode* travel = list->_head;
+
+ while (travel != nodeBefore)
+ {
+ travel = travel->_next;
+ }
+
+ if (travel == nullptr)
+ return false;
+
+
+ nodeToInsert->_next = nodeBefore->_next;
+ nodeBefore->_next = nodeToInsert;
+
+ return true;
+}
+
+bool InsertBefore(SinglyLinkedList* list, ListNode* node, ListNode* nodeToInsert)
+{
+ if (list->_size == 0)
+ return false;
+
+ ListNode* travel = list->_head;
+ ListNode* temp = list->_head;
+
+ while (travel != node)
+ {
+ travel = travel->_next;
+ }
+
+ while (temp->_next != node)
+ {
+ temp = temp->_next;
+ }
+
+ if (travel == nullptr)
+ return false;
+
+ nodeToInsert->_next = node;
+ temp->_next = nodeToInsert;
+
+ return true;
+}
+
+
+bool Clear(SinglyLinkedList* list)
+{
+ if (list->_size == 0)
+ return true;
+
+ ListNode* travel = list->_head;
+ ListNode* next = nullptr;
+
+ while (travel != nullptr)
+ {
+ next = travel->_next;
+ delete travel;
+ travel = next;
+ }
+
+ list->_head = nullptr;
+ list->_size = 0;
+
+ return true;
+}
+
+
+
#endif
+
diff --git a/CST 126/UnitTests/UnitTests.cpp b/CST 126/UnitTests/UnitTests.cpp
index 4b17624..f4f3683 100644
--- a/CST 126/UnitTests/UnitTests.cpp
+++ b/CST 126/UnitTests/UnitTests.cpp
@@ -120,5 +120,98 @@ namespace LinkedListUnitTests
travel = travel->_next;
}
}
+
+ TEST_METHOD(InsertAfterLinkedList)
+ {
+ //Arrange
+ SinglyLinkedList linkedList{};
+ ListNode* node = new ListNode{ 1, nullptr };
+ ListNode* node2 = new ListNode{ 2, nullptr };
+ ListNode* node3 = new ListNode{ 3, nullptr };
+ ListNode* node4 = new ListNode{ 4, nullptr };
+ ListNode* node5 = new ListNode{ 5, nullptr };
+ ListNode* node6 = new ListNode{ 6, nullptr };
+
+ //Act
+ bool success = Append(&linkedList, node);
+ success = Append(&linkedList, node2);
+ success = Append(&linkedList, node3);
+ success = Append(&linkedList, node4);
+ success = Append(&linkedList, node6);
+ success = InsertAfter(&linkedList, node4, node5);
+
+ ListNode* travel = linkedList._head;
+
+ //Assert
+
+ for (auto i = 1; i <= 6; i++)
+ {
+ Assert::AreEqual(i, travel->_data);
+ travel = travel->_next;
+ }
+ }
+
+ TEST_METHOD(InsertBeforeLinkedList)
+ {
+ //Arrange
+ SinglyLinkedList linkedList{};
+ ListNode* node = new ListNode{ 1, nullptr };
+ ListNode* node2 = new ListNode{ 2, nullptr };
+ ListNode* node3 = new ListNode{ 3, nullptr };
+ ListNode* node4 = new ListNode{ 4, nullptr };
+ ListNode* node5 = new ListNode{ 5, nullptr };
+ ListNode* node6 = new ListNode{ 6, nullptr };
+
+ //Act
+ bool success = Append(&linkedList, node);
+ success = Append(&linkedList, node2);
+ success = Append(&linkedList, node3);
+ success = Append(&linkedList, node4);
+ success = Append(&linkedList, node6);
+ success = InsertBefore(&linkedList, node6, node5);
+
+ ListNode* travel = linkedList._head;
+
+ //Assert
+
+ for (auto i = 1; i <= 6; i++)
+ {
+ Assert::AreEqual(i, travel->_data);
+ travel = travel->_next;
+ }
+ }
+
+
+ TEST_METHOD(ClearLinkedList)
+ {
+ //Arrange
+ SinglyLinkedList linkedList{};
+ ListNode* node = new ListNode{ 1, nullptr };
+ ListNode* node2 = new ListNode{ 2, nullptr };
+ ListNode* node3 = new ListNode{ 3, nullptr };
+ ListNode* node4 = new ListNode{ 4, nullptr };
+ ListNode* node5 = new ListNode{ 5, nullptr };
+ ListNode* node6 = new ListNode{ 6, nullptr };
+
+ //Act
+ bool success = Append(&linkedList, node);
+ success = Append(&linkedList, node2);
+ success = Append(&linkedList, node3);
+ success = Append(&linkedList, node4);
+ success = Append(&linkedList, node6);
+ success = InsertBefore(&linkedList, node6, node5);
+
+ ListNode* travel = linkedList._head;
+
+ for (auto i = 1; i <= 6; i++)
+ {
+ Assert::AreEqual(i, travel->_data);
+ travel = travel->_next;
+ }
+ success = Clear(&linkedList);
+
+ //Assert
+ Assert::AreEqual(0ull, linkedList._size);
+ }
};
}