176 lines
4.9 KiB
Plaintext
176 lines
4.9 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# COS226 - HW2b\n",
|
|
"## NICHOLAS PEASE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"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": 116,
|
|
"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": 107,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def mergeSorted(listA, listB):\n",
|
|
" mergedList = LinkedList()\n",
|
|
" elementA = listA.getHead()\n",
|
|
" elementB = listB.getHead()\n",
|
|
" while (elementA != None) and (elementB != None):\n",
|
|
" if elementA.read() <= elementB.read():\n",
|
|
" mergedList.add(elementA.read())\n",
|
|
" elementA = elementA.getNext()\n",
|
|
" elif elementB.read() < elementA.read():\n",
|
|
" mergedList.add(elementB.read())\n",
|
|
" elementB = elementB.getNext()\n",
|
|
" \n",
|
|
" if elementA == None:\n",
|
|
" mergedList.add(elementB.read())\n",
|
|
" else:\n",
|
|
" mergedList.add(elementA.read())\n",
|
|
"\n",
|
|
" return mergedList"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 125,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"List A: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]\n",
|
|
"List A Size: 12\n",
|
|
"\n",
|
|
"List B: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]\n",
|
|
"List B Size: 12\n",
|
|
"\n",
|
|
"Merged: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]\n",
|
|
"Merged Size: 24\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Runner\n",
|
|
"\n",
|
|
"# Two linked lists\n",
|
|
"linkedlistA = LinkedList()\n",
|
|
"linkedlistB = LinkedList()\n",
|
|
"\n",
|
|
"# Initalize list A\n",
|
|
"for i in range(1,25,2):\n",
|
|
" linkedlistA.add(i)\n",
|
|
"\n",
|
|
"# Initialize list B\n",
|
|
"for i in range(2,25,2):\n",
|
|
" linkedlistB.add(i)\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: {linkedlistB.getSize()}\\n\")\n",
|
|
"\n",
|
|
"# Mere Lists and Print Output\n",
|
|
"mergedList = mergeSorted(linkedlistA, linkedlistB)\n",
|
|
"print(f\"Merged: [{mergedList.toString()}]\\nMerged Size: {mergedList.getSize()}\")"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|