刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列
二叉樹的題目告一段落,後面陸續做了些基礎的題;感覺沒有什麼好記錄的。
這次是一個非常基礎題目用遞迴和遍歷兩個方法反轉一個單鏈佇列。如下所示。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - 合併兩個順序佇列為一個新的佇列佇列
- Java遍歷資料夾的兩種方法(非遞迴和遞迴)Java遞迴
- Python自學之路:遞迴、棧和佇列遍歷目錄Python遞迴佇列
- 【刷題】二叉樹非遞迴遍歷二叉樹遞迴
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹後續遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 每天刷個演算法題20160518:非遞迴二叉樹遍歷演算法遞迴二叉樹
- [每日一題] 第七題:用兩個棧實現佇列每日一題佇列
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 刷題系列 - 實現一個指數運算方法,對遞迴次數和運算時間有約束。遞迴
- 遍歷某一個指定目錄下的所有子目錄和檔案(遞迴)遞迴
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 面試題之【用兩個棧實現佇列】面試題佇列
- 題目9:用兩個棧實現佇列佇列
- 用兩個棧實現佇列佇列
- 迭代及用遞迴遍歷File檔案遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- C++單連結串列遞迴遍歷操作C++遞迴
- js遞迴遍歷講解JS遞迴
- JavaScript遍歷陣列每一個元素JavaScript陣列
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- C#中遍歷TreeView的兩個常用方法C#View
- $.each()方法遍歷陣列和物件簡單物件陣列物件
- 【JavaScript實用技巧(一)】迴圈遍歷與跳出迴圈遍歷JavaScript
- 每天刷個演算法題20160525:快速排序的遞迴轉非遞迴解法演算法排序遞迴
- Python零基礎學習筆記(三十八)——遞迴方法、棧、佇列模擬遍歷目錄Python筆記遞迴佇列
- 建立X個任意元素陣列並且可以遍歷的的一個方法陣列
- 遞迴遍歷網站所有 url遞迴網站
- Java 資料夾遞迴遍歷Java遞迴
- PHP遞迴遍歷資料夾PHP遞迴
- python 遞迴遍歷目錄Python遞迴
- 每天刷個演算法題20160524:阿克曼函式的遞迴轉非遞迴解法演算法函式遞迴
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- java基礎:遞迴應用---遍歷檔案目錄Java遞迴
- 【劍指offer】兩個棧實現一個佇列佇列