将节点链向左旋转 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
我要编写一个名为 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