翻转指定区间内的链表连接方向(不改变节点的值),以’1->2->3’的形式输出翻转后的链表。
class IntNode(object):
def __init__(self, value, next_node, previous_node):
self.value = value
self.next = next_node
self.prev = previous_node
class DLList(object):
def __init__(self):
self.__sentinel = IntNode(None, None, None)
self.__sentinel.next = self.__sentinel
self.__sentinel.prev = self.__sentinel
self.__size = 0
def add_first(self, x):
self.__sentinel.next = IntNode(x, self.__sentinel.next, self.__sentinel)
self.__sentinel.next.next.prev = self.__sentinel.next
self.__size += 1
def get_first(self):
return self.__sentinel.next
def get_last(self):
return self.__sentinel.prev
def add_last(self, x):
self.__sentinel.prev = IntNode(x, self.__sentinel, self.__sentinel.prev)
self.__sentinel.prev.prev.next = self.__sentinel.prev
self.__size += 1
def reverse(self, index1, index2):
p = self.get_first()
index = 0
while index != index1:
index += 1
p = p.next
p_prev = p.prev
current = p.next
current_next = current.next
current_prev = current.prev
index += 1
while index != index2:
current_prev.prev = current
current.next = current_prev
current.prev = current_next
current_prev = current
current = current_next
current_next = current_next.next
index += 1
current.next = current_prev
current.prev = p_prev
p.next = current_prev
p_prev.next = current
p.next = current_next
current_next.prev = p
def output(self):
result = ''
p = self.get_first()
index = 0
while index != self.__size - 1:
result += str(p.value) + '->'
p = p.next
index += 1
result += str(p.value)
print(result)
dllist = DLList()
for num in [1, 2, 3, 4, 5, 6, 7]:
dllist.add_last(num)
dllist.reverse(0, 6)
dllist.output()