将节点链向左旋转 n 次并返回节点链的新头部未按预期工作

Rotating the Node chain to left n times and returning the new head of the Node chain not working as expected

我要编写一个名为 rotate(head, n) 的函数,它将节点链的头部和一个整数 n 作为参数。该函数必须将Node链向左旋转n次,return新的Node链头

例如,给定以下节点链: A -> B -> C -> None

向左旋转一次会产生: B -> C -> A -> None 我要记住,节点链将至少包含三个元素,n 可以是任何非负整数。

这是我的 Node class:

class Node:
    def __init__(self, data, next_node=None):
        self.__data = data
        self.__next = next_node

    def get_data(self):
        return self.__data

    def set_data(self, data):
        self.__data = data

    def get_next(self):
        return self.__next

    def set_next(self, new_next):
        self.__next = new_next
    
    def __str__(self):
        return f'{self.__data} -> {self.__next}'

这是我的 rotate() 函数:

def rotate(head, n):
    if (n == 0):
        return
    current = head
    while (current.get_next() != None):
        current = current.get_next()
   
    current.next = head
    current = head
    for i in range(n - 1):
        current = current.get_next()
   
    head = current.get_next()
    current = None
    return head

测试:

chain = from_list(['A', 'B', 'C'])
print(chain)
chain = rotate(chain, 1)
print(chain)

预期输出:

A -> B -> C -> None
B -> C -> A -> None

收到的输出:

A -> B -> C -> None
B -> C -> None

测试 2:

chain = from_list(['A', 'B', 'C'])
print(chain)
chain = rotate(chain, 2)
print(chain)

预期输出 2:

A -> B -> C -> None
C -> A -> B -> None

获得的输出 2:

C -> A -> B -> None
A -> B -> C -> None
C -> None

测试:

chain = from_list([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(chain)
chain = rotate(chain, 0)
print(chain)

预计:

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> None
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> None

得到:

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> None
None

你有三个小错误,这是正确的版本:

def rotate(head, n):
    if (n == 0):
        return head # fixed
    current = head
    while (current.get_next() != None):
        current = current.get_next()

    current.set_next(head) # fixed
    current = head
    for i in range(n - 1):
        current = current.get_next()
   
    head = current.get_next()
    current.set_next(None) # fixed
    return head