python 链表部分反向
python linkedlist partly reverse
我在 class 中得到了一个链接列表,例如
7,5,3,1,2,4,6,8
我想得到这样的输出
1,3,5,7,2,4,6,8
当我尝试使用下面的反向代码时:
class Linkedlist:
def __init__(self, L = None):
...
def partlyreverse(self):
tail = self.head
current_node = self.head.next_node
tail.next_node = None
while current_node.value % 2 == 1:
next_current_node = current_node.next_node
current_node.next_node = tail
tail = current_node
current_node = next_current_node
self.head = tail
L = Linkedlist([7,5,3,1,2,4,6,8])
L.partlyreverse()
我只能得到
1,3,5,7
那我该怎么做呢?
谢谢!
您基本上需要检查列表的开头是否包含奇数或偶数!并基于此你需要扭转!
>>> s
(7, 3, 5, 1, 2, 4, 6, 8)
>>> sorted(filter(lambda x:(x%2!=0 and s[0]%2!=0) or (x%2==0 and s[0]%2==0),s)) + sorted(filter(lambda x:(x%2!=0 and s[-1]%2!=0) or (x%2==0 and s[-1]%2==0),s))
[1, 3, 5, 7, 2, 4, 6, 8]
您的问题不是 100% 清楚:您是否试图将链表分成两半,开头是奇数,结尾是偶数?您是否试图在不考虑值本身的情况下对列表进行分区?
此外,必须有您没有随问题一起提交的代码...我已尽我所能猜测该代码可能是什么样子。
下面的代码段 returns 您想要的输出:
class Node:
def __init__(self, value):
self.value = value
self.next_node = None
class Linkedlist:
def __init__(self, L=None):
self.head = Node(L[0])
current = self.head
for value in L[1:]:
current.next_node = Node(value)
current = current.next_node
def partlyreverse(self):
tail_start = self.head
tail_end = self.head
tail2_start = None
tail2_end = None
current_node = self.head.next_node
while current_node != None:
if current_node.value % 2 == 1:
next_current_node = current_node.next_node
current_node.next_node = tail_start
tail_start = current_node
current_node = next_current_node
else:
if not tail2_start:
tail2_start = current_node
tail2_end = tail2_start
current_node = current_node.next_node
else:
tail2_end.next_node = current_node
tail2_end = current_node
current_node = current_node.next_node
tail_end.next_node = tail2_start
self.head = tail_start
L = Linkedlist([7,5,3,1,2,4,6,8])
L.partlyreverse()
def RecursivelyPrintNodes(node):
if node != None:
print node.value
RecursivelyPrintNodes(node.next_node)
RecursivelyPrintNodes(L.head)
# 1,3,5,7,2,4,6,8
最后,我明白了您在代码中的目的,但请注意,您编写的代码无法编译(您的 class 中存在缩进错误)。
我在 class 中得到了一个链接列表,例如
7,5,3,1,2,4,6,8
我想得到这样的输出
1,3,5,7,2,4,6,8
当我尝试使用下面的反向代码时:
class Linkedlist:
def __init__(self, L = None):
...
def partlyreverse(self):
tail = self.head
current_node = self.head.next_node
tail.next_node = None
while current_node.value % 2 == 1:
next_current_node = current_node.next_node
current_node.next_node = tail
tail = current_node
current_node = next_current_node
self.head = tail
L = Linkedlist([7,5,3,1,2,4,6,8])
L.partlyreverse()
我只能得到
1,3,5,7
那我该怎么做呢?
谢谢!
您基本上需要检查列表的开头是否包含奇数或偶数!并基于此你需要扭转!
>>> s
(7, 3, 5, 1, 2, 4, 6, 8)
>>> sorted(filter(lambda x:(x%2!=0 and s[0]%2!=0) or (x%2==0 and s[0]%2==0),s)) + sorted(filter(lambda x:(x%2!=0 and s[-1]%2!=0) or (x%2==0 and s[-1]%2==0),s))
[1, 3, 5, 7, 2, 4, 6, 8]
您的问题不是 100% 清楚:您是否试图将链表分成两半,开头是奇数,结尾是偶数?您是否试图在不考虑值本身的情况下对列表进行分区?
此外,必须有您没有随问题一起提交的代码...我已尽我所能猜测该代码可能是什么样子。
下面的代码段 returns 您想要的输出:
class Node:
def __init__(self, value):
self.value = value
self.next_node = None
class Linkedlist:
def __init__(self, L=None):
self.head = Node(L[0])
current = self.head
for value in L[1:]:
current.next_node = Node(value)
current = current.next_node
def partlyreverse(self):
tail_start = self.head
tail_end = self.head
tail2_start = None
tail2_end = None
current_node = self.head.next_node
while current_node != None:
if current_node.value % 2 == 1:
next_current_node = current_node.next_node
current_node.next_node = tail_start
tail_start = current_node
current_node = next_current_node
else:
if not tail2_start:
tail2_start = current_node
tail2_end = tail2_start
current_node = current_node.next_node
else:
tail2_end.next_node = current_node
tail2_end = current_node
current_node = current_node.next_node
tail_end.next_node = tail2_start
self.head = tail_start
L = Linkedlist([7,5,3,1,2,4,6,8])
L.partlyreverse()
def RecursivelyPrintNodes(node):
if node != None:
print node.value
RecursivelyPrintNodes(node.next_node)
RecursivelyPrintNodes(L.head)
# 1,3,5,7,2,4,6,8
最后,我明白了您在代码中的目的,但请注意,您编写的代码无法编译(您的 class 中存在缩进错误)。