1. 程式人生 > >Pat乙級1025題——反轉連結串列(Python)一個非零返回,一個執行超時

Pat乙級1025題——反轉連結串列(Python)一個非零返回,一個執行超時

注意

  • 注意如果上一次有反轉,那麼要將上一次最後一個數據的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()

測試結果

這裡寫圖片描述