刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列
二叉樹的題目告一段落,後面陸續做了些基礎的題;感覺沒有什麼好記錄的。
這次是一個非常基礎題目用遞迴和遍歷兩個方法反轉一個單鏈佇列。如下所示。
Input:
1->2->3->4->5->NULL
Output:
5->4->3->2->1->NULL
遞迴的方法,考慮了下其實方法很多,我想了比較簡單的,就是取出第一個節點,放在後續節佇列的最後,如此迴圈遞迴直到只有一個節點位置。程式碼是很好寫,就是效率太低,提交執行時間1008ms,實在是,主要每次一個節點排序,都要遍歷整條佇列,其實應該有更好的。
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode: if head == None or head.next == None: return head node = self.reverseList(head.next) head.next = None checknode = node while checknode.next != None: checknode = checknode.next checknode.next = head return node
遍歷方法也很簡單,就是新建一個佇列做棧,把單鏈佇列的按照順序放入,然後反向推出節點,重組佇列返回即可。提交執行時間34ms, 效率高很多。
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode: if head == None: return head nodeStack = [] while head != None: nodeStack.append(head) head = head.next print(len(nodeStack)) newHead = nodeStack.pop() point = newHead while nodeStack != []: point.next = nodeStack.pop() point = point.next point.next = None return newHead
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2676131/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - 合併兩個順序佇列為一個新的佇列佇列
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- Python自學之路:遞迴、棧和佇列遍歷目錄Python遞迴佇列
- 刷題系列 - Python用非遞迴實現二叉樹後續遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- [每日一題] 第七題:用兩個棧實現佇列每日一題佇列
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 反轉連結串列系列題練習遞迴遞迴
- 題目9:用兩個棧實現佇列佇列
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 刷題系列 - 實現一個指數運算方法,對遞迴次數和運算時間有約束。遞迴
- 面試題之【用兩個棧實現佇列】面試題佇列
- 迭代及用遞迴遍歷File檔案遞迴
- Python零基礎學習筆記(三十八)——遞迴方法、棧、佇列模擬遍歷目錄Python筆記遞迴佇列
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- C++單連結串列遞迴遍歷操作C++遞迴
- JavaScript遍歷陣列每一個元素JavaScript陣列
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- js遞迴遍歷講解JS遞迴
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 【JavaScript實用技巧(一)】迴圈遍歷與跳出迴圈遍歷JavaScript
- 迴圈遍歷中幾個高頻使用的方法
- 建立X個任意元素陣列並且可以遍歷的的一個方法陣列
- 利用遞迴方法實現連結串列反轉、前N個節點反轉以及中間部分節點反轉遞迴
- 遞迴遍歷網站所有 url遞迴網站
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 佇列 和 迴圈佇列佇列
- 兩個棧實現佇列佇列
- C# 列舉遍歷和轉換C#
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- java8 對list集合中的物件遍歷,重新賦值兩種方法,遍歷某個屬性返回陣列Java物件賦值陣列
- 陣列遍歷方法陣列
- 兩個專案用訊息佇列通訊佇列
- 遞迴遍歷物件獲取value值遞迴物件
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 反轉一個單連結串列。