def partition(headNode, x): less_list = None greater_list = None if headNode == None: return 'cannot partition empty linkedlist' while headNode != None: current_data = headNode.data if current_data < x: if less_list == None: less_list = Node(current_data) else: less_list.addToTail(current_data) else: if greater_list == None: greater_list = Node(current_data) else: greater_list.addToTail(current_data) headNode = headNode.nextNode if less_list == None: return greater_list elif greater_list == None: return less_list else: less_list.addNodeToTail(greater_list) result = less_list return result
def sumLinkedListReverse(first, second): if first == None and second == None: return None carry = 0 result = None while first != None or second != None or carry != 0: digit_sum = carry if first != None: digit_sum += first.data first = first.nextNode if second != None: digit_sum += second.data second = second.nextNode if result == None: result = Node(digit_sum % 10) else: result.addToTail(digit_sum % 10) carry = digit_sum / 10 return result
def sumLinkedListReverse(first, second): if first == None and second == None: return None carry = 0 result = None while first != None or second != None or carry != 0: digit_sum = carry if first != None: digit_sum += first.data first = first.nextNode if second != None: digit_sum += second.data second = second.nextNode if result == None: result = Node(digit_sum%10) else: result.addToTail(digit_sum%10) carry = digit_sum / 10 return result
from linkedList import Node # Assume k is less than number of nodes def removeKthNode(listNode, k): if listNode == None or k < 0: return None runner = listNode for i in range(k - 1): if runner.nextNode != None: runner = runner.nextNode else: return None while runner != None: listNode = listNode.nextNode runner = runner.nextNode return listNode.data test = Node(3) test.addToTail(4) test.addToTail(5) test.addToTail(5) test.addToTail(3) test.addToTail(6)
return result def sumLinkedListForward(first, second): first_list = reverseLinkedList(first) second_list = reverseLinkedList(second) return sumLinkedListReverse(first_list, second_list) def reverseLinkedList(linkedList): result = None while linkedList != None: data = linkedList.data if result == None: result = Node(data) else: node = Node(data) node.nextNode = result result = node linkedList = linkedList.nextNode return result first_test = Node(7) first_test.addToTail(1) first_test.addToTail(6) second_test = Node(5) second_test.addToTail(9) second_test.addToTail(2)
carry = digit_sum / 10 return result def sumLinkedListForward(first, second): first_list = reverseLinkedList(first) second_list = reverseLinkedList(second) return sumLinkedListReverse(first_list, second_list) def reverseLinkedList(linkedList): result = None while linkedList != None: data = linkedList.data if result == None: result = Node(data) else: node = Node(data) node.nextNode = result result = node linkedList = linkedList.nextNode return result first_test = Node(7) first_test.addToTail(1) first_test.addToTail(6) second_test = Node(5) second_test.addToTail(9) second_test.addToTail(2)
while node.nextNode != None: current = node.nextNode.data if current not in listSet: listSet.append(current) node = node.nextNode else: if node.nextNode.nextNode: node.nextNode = node.nextNode.nextNode else: node.nextNode = None def removeDuplicatesNoBuffer(node): if node is None: return None while node != None: current = node while current.nextNode != None: if current.nextNode.data == node.data: current.nextNode = current.nextNode.nextNode else: current = current.nextNode node = node.nextNode test = Node(3) test.addToTail(4) test.addToTail(5) test.addToTail(5) test.addToTail(3) test.addToTail(6)