刷题系列,用递归和遍历两个方法反转一个单链队列

  

二叉树的题目告一段落,后面陆续做了些基础的题,感觉没有什么好记录的。

  

这次是一个非常基础题目用递归和遍历两个方法反转一个单链队列。如下所示。   

  

  <强>输入:      <强>输出:   

     

递归的方法,考虑了下其实方法很多,我想了比较简单的,就是取出第一个节点,放在后续节队列的最后,如此循环递归直到只有一个节点位置。代码是很好写,就是效率太低,提交运行时间1008 ms,实在是,主要每次一个节点排的序,都要遍历整条队列,其实应该有更好的。

  
 #, Definition  for  singly-linked 列表。
  #,class  ListNode:
  #,,,,,def  __init__(自我,,x):
  #,,,,,,,,,self.val =, x
  #,,,,,,,,,self.next =,没有
  ,
  class 解决方案:
  ,,,def  reverseList(负责人:自我,还以为;ListNode),→, ListNode:
  ,,,,,,,if  head ==, None 或是head.next ==,没有:
  ,,,,,,,,,,,return 头
  ,,,,,,,node =, self.reverseList (head.next)
  ,,,,,,,head.next =,没有
  ,,,,,,,checknode =,节点
  ,,,,,,,while  checknode.next  !=,没有:
  ,,,,,,,,,,,checknode =checknode.next
  ,,,,,,,checknode.next =,
  ,,,,,,,return 节点
     

遍历方法也很简单,就是新建一个队列做栈,把单链队列的按照顺序放入,然后反向推出节点,重组队列返回即可。提交运行时间34女士,效率高很多。

  
 #, Definition  for  singly-linked 列表。
  #,class  ListNode:
  #,,,,,def  __init__(自我,,x):
  #,,,,,,,,,self.val =, x
  #,,,,,,,,,self.next =,没有
  ,
  class 解决方案:
  ,,,def  reverseList(负责人:自我,还以为;ListNode),→, ListNode:
  ,,,,,,,if  head ==,没有:
  ,,,,,,,,,,,return 头
  ,,,,,,,nodeStack =, []
  ,,,,,,,while  head  !=,没有:
  ,,,,,,,,,,,nodeStack.append(头)
  ,,,,,,,,,,,head =head.next
  ,,,,,,,印刷(len (nodeStack))
  ,,,,,,,newHead =, nodeStack.pop ()
  ,,,,,,,point =newHead
  ,,,,,,,while  nodeStack  !=, []:
  ,,,,,,,,,,,point.next =, nodeStack.pop ()
  ,,,,,,,,,,,point =point.next
  ,,,,,,,point.next =,没有
  ,,,,,,,return  newHead 

刷题系列,用递归和遍历两个方法反转一个单链队列