Use New LinkedList for part A
This commit is contained in:
+74
-58
@@ -10,7 +10,27 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"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": [
|
||||
@@ -20,87 +40,86 @@
|
||||
" # 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, payload):\n",
|
||||
" self.payload = payload\n",
|
||||
" self.next = False\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 setNext(self, nextPayload):\n",
|
||||
" self.next = LinkedList(nextPayload)\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",
|
||||
" # Grab and return next LinkedList node in series\n",
|
||||
" # self: Class\n",
|
||||
" # ret: LinkedList node\n",
|
||||
" def getNext(self):\n",
|
||||
" return self.next\n",
|
||||
" def getTail(self):\n",
|
||||
" return self.tail\n",
|
||||
" \n",
|
||||
" # Write information to current LinkedList node\n",
|
||||
" # self: Class\n",
|
||||
" # payload: Any information to load to node\n",
|
||||
" def write(self, payload):\n",
|
||||
" self.payload = payload\n",
|
||||
" def getHead(self):\n",
|
||||
" return self.head\n",
|
||||
" \n",
|
||||
" # Read payload from current LinkedList node\n",
|
||||
" # self: Class\n",
|
||||
" # ret: <T> payload\n",
|
||||
" def read(self):\n",
|
||||
" return self.payload\n",
|
||||
" def getSize(self):\n",
|
||||
" return self.size\n",
|
||||
"\n",
|
||||
" # Returns entire linked list chain from node onward as a string\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",
|
||||
" if self.next == False:\n",
|
||||
" return str(self.payload)\n",
|
||||
" else:\n",
|
||||
" return str(self.payload)+ \", \" + self.getNext().toString()\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": 3,
|
||||
"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(listAStart, listBStart):\n",
|
||||
" # Create temp new lsit to save modifications to\n",
|
||||
" newList = listAStart\n",
|
||||
" currentElement = newList\n",
|
||||
" # Pass over every element until arrived at the end of the first list\n",
|
||||
" # O(n)\n",
|
||||
" while currentElement.getNext() != False:\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",
|
||||
"\n",
|
||||
" currentBElement = listBStart\n",
|
||||
" # Pass over every element in second list, adding to listA\n",
|
||||
" # O(n)\n",
|
||||
" while currentBElement.getNext() != False:\n",
|
||||
" currentElement.setNext(currentBElement.read())\n",
|
||||
" currentElement = listB.getHead()\n",
|
||||
" while currentElement != None:\n",
|
||||
" newList.add(currentElement.read())\n",
|
||||
" currentElement = currentElement.getNext()\n",
|
||||
" currentBElement = currentBElement.getNext()\n",
|
||||
" \n",
|
||||
" currentElement.setNext(currentBElement.read())\n",
|
||||
" \n",
|
||||
" return newList"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"List A: [3, 0, 7, 0, 10, 1, 1, 10, 7, 4]\n",
|
||||
"List B: [2, 3, 6, 1, 2, 2, 6, 9, 4, 1]\n",
|
||||
"Merged: [3, 0, 7, 0, 10, 1, 1, 10, 7, 4, 2, 3, 6, 1, 2, 2, 6, 9, 4, 1]\n"
|
||||
"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"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -108,27 +127,24 @@
|
||||
"import random\n",
|
||||
"\n",
|
||||
"# Two linked lists\n",
|
||||
"linkedlistA = LinkedList(random.randint(0,10))\n",
|
||||
"linkedlistB = LinkedList(random.randint(0,10))\n",
|
||||
"linkedlistA = LinkedList()\n",
|
||||
"linkedlistB = LinkedList()\n",
|
||||
"\n",
|
||||
"element = linkedlistA\n",
|
||||
"# Initalize list A\n",
|
||||
"for i in range(1,10):\n",
|
||||
" element.setNext(random.randint(0,10))\n",
|
||||
" element = element.getNext()\n",
|
||||
" linkedlistA.add(random.randint(0,10))\n",
|
||||
"\n",
|
||||
"element = linkedlistB\n",
|
||||
"# Initialize list B\n",
|
||||
"for i in range(1,10):\n",
|
||||
" element.setNext(random.randint(0,10))\n",
|
||||
" element = element.getNext()\n",
|
||||
" linkedlistB.add(random.randint(0,10))\n",
|
||||
"\n",
|
||||
"# Print both lists\n",
|
||||
"print(f\"List A: [{linkedlistA.toString()}]\")\n",
|
||||
"print(f\"List B: [{linkedlistB.toString()}]\")\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",
|
||||
"print(f\"Merged: [{mergeLists(linkedlistA, linkedlistB).toString()}]\")"
|
||||
"merged = mergeLists(linkedlistA, linkedlistB)\n",
|
||||
"print(f\"Merged: [{merged.toString()}]\\nMerged List Size: {merged.getSize()}\\n\")"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user