Files
2023-10-04 21:28:30 -04:00

174 lines
4.8 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# COS226 - HW2a\n",
"## NICHOLAS PEASE"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"class LinkedListNode:\n",
" def __init__(self, payload):\n",
" self.payload = payload\n",
" self.next = None\n",
" def setNext(self, next):\n",
" self.next = next\n",
" def getNext(self):\n",
" return self.next\n",
" def read(self):\n",
" return self.payload\n",
" def write(self, payload):\n",
" self.payload = payload"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Linked List Class\n",
"class LinkedList:\n",
"\n",
" # Initialize LinkedList with no next item and a payload set at creation\n",
" # self: Class\n",
" # payload: Any information to load to npde\n",
" def __init__(self):\n",
" self.head = None\n",
" self.tail = None\n",
" self.size = 0\n",
"\n",
" # Create next LinkedList node and initalize value\n",
" # self: Class\n",
" # nextPayload: Payload to load to new element\n",
" def add(self, nextPayload):\n",
" newNode = LinkedListNode(nextPayload)\n",
" if self.head == None:\n",
" self.head = newNode\n",
" self.tail = newNode\n",
" else:\n",
" self.tail.setNext(newNode)\n",
" self.tail = newNode\n",
" self.size += 1\n",
"\n",
" def getTail(self):\n",
" return self.tail\n",
" \n",
" def getHead(self):\n",
" return self.head\n",
" \n",
" def getSize(self):\n",
" return self.size\n",
"\n",
" # Returns entire linked list as a string\n",
" # self: Class\n",
" # ret: <String> all items in LinkedList from node onward\n",
" def toString(self):\n",
" node = self.head\n",
" returnString = \"\"\n",
" while node.getNext() != None:\n",
" returnString += f\"{str(node.read())}, \"\n",
" node = node.getNext()\n",
" return returnString + str(node.read())"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# Merge two unsorted LinkedLists\n",
"# listAStart: first node of first LinkedList\n",
"# listBStart: first node of second LinkedList\n",
"def mergeLists(listA, listB):\n",
" newList = LinkedList()\n",
" currentElement = listA.getHead()\n",
" while currentElement != None:\n",
" newList.add(currentElement.read())\n",
" currentElement = currentElement.getNext()\n",
" currentElement = listB.getHead()\n",
" while currentElement != None:\n",
" newList.add(currentElement.read())\n",
" currentElement = currentElement.getNext()\n",
" \n",
" return newList"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"List A: [0, 6, 8, 10, 1, 9, 9, 7, 1]\n",
"List A Size: 9\n",
"\n",
"List B: [5, 6, 1, 4, 0, 3, 1, 8, 6]\n",
"List B Size: 9\n",
"\n",
"Merged: [0, 6, 8, 10, 1, 9, 9, 7, 1, 5, 6, 1, 4, 0, 3, 1, 8, 6]\n",
"Merged List Size: 18\n",
"\n"
]
}
],
"source": [
"import random\n",
"\n",
"# Two linked lists\n",
"linkedlistA = LinkedList()\n",
"linkedlistB = LinkedList()\n",
"\n",
"# Initalize list A\n",
"for i in range(1,10):\n",
" linkedlistA.add(random.randint(0,10))\n",
"\n",
"# Initialize list B\n",
"for i in range(1,10):\n",
" linkedlistB.add(random.randint(0,10))\n",
"\n",
"# Print both lists\n",
"print(f\"List A: [{linkedlistA.toString()}]\\nList A Size: {linkedlistA.getSize()}\\n\")\n",
"print(f\"List B: [{linkedlistB.toString()}]\\nList B Size: {linkedlistA.getSize()}\\n\")\n",
"\n",
"# Mere Lists and Print Output\n",
"merged = mergeLists(linkedlistA, linkedlistB)\n",
"print(f\"Merged: [{merged.toString()}]\\nMerged List Size: {merged.getSize()}\\n\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}