示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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)
示例#6
0
    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)
示例#7
0
        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)
示例#8
0
    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)