Pat乙級1025題——反轉連結串列(Python)一個非零返回,一個執行超時
阿新 • • 發佈:2019-01-23
注意
- 注意如果上一次有反轉,那麼要將上一次最後一個數據的next改成本次反轉後的開始的地址
程式碼測試結果為21分,出現一個非零返回,一個執行超時
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def reverseList():
input = raw_input().split(' ')
input[1] = int(input[1])
input[2] = int(input[2])
inputList = [] ##存放連結串列
global newstart
for i in range(input[1 ]):
inputList.append(raw_input().split(' '))
def indexFind(item, aimlist): ##根據地址和列表,找到資料在列表中的位置
for i in range(len(aimlist)):
if aimlist[i][0] == item:
return i
def reverse(start, lastEnd, list): ##根據起始地址,將接下來的input[2]個結點進行反轉
next = start
address = start
for i in range(input[2]):
index = indexFind(next, list)
next = list[index][2] ##先記住下一個資料的地址
list[index][2] = address ##把上一個資料的地址賦值給這個資料的next位置,實現反轉
address = list[index][0] ##記住這個資料的地址,用於賦值給下一個資料的next位置
index = indexFind(start, list)
list[index][2 ] = next
if lastEnd != 'NULL': ##如果上一次有反轉,那麼要將上一次最後一個數據的next改成本次反轉後的開始的地址
lastIndex = indexFind(lastEnd, inputList)
list[lastIndex][2] = address
lastEnd = list[index][0]
if start == input[0]:##找到反轉後連結串列開始的位置
global newstart
newstart = address
return next, lastEnd
start = input[0]
lastEnd = 'NULL'
count = input[1]
while count >= input[2]:
start, lastEnd = reverse(start, lastEnd, inputList)
count = count - input[2]
next = newstart
for i in range(len(inputList)):
#print inputList[i]
index = indexFind(next, inputList)
print (' ').join(map(str, inputList[index]))
next = inputList[index][2]
if __name__ == '__main__':
reverseList()