亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié)

 更新時間:2020年02月24日 11:01:38   作者:petrolero  
這篇文章主要介紹了用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

如何把一個單鏈表進行反轉(zhuǎn)?

方法1:將單鏈表儲存為數(shù)組,然后按照數(shù)組的索引逆序進行反轉(zhuǎn)。

方法2:使用3個指針遍歷單鏈表,逐個鏈接點進行反轉(zhuǎn)。

方法3:從第2個節(jié)點到第N個節(jié)點,依次逐節(jié)點插入到第1個節(jié)點(head節(jié)點)之后,最后將第一個節(jié)點挪到新表的表尾。

方法4: 遞歸(相信我們都熟悉的一點是,對于樹的大部分問題,基本可以考慮用遞歸來解決。但是我們不太熟悉的一點是,對于單鏈表的一些問題,也可以使用遞歸??梢哉J為單鏈表是一顆永遠只有左(右)子樹的樹,因此可以考慮用遞歸來解決?;蛘哒f,因為單鏈表本身的結(jié)構(gòu)也有自相似的特點,所以可以考慮用遞歸來解決)

開辟輔助數(shù)組,新建表頭反轉(zhuǎn),就地反轉(zhuǎn),遞歸反轉(zhuǎn)

# -*- coding: utf-8 -*-
'''
鏈表逆序
'''
class ListNode: 
  def __init__(self,x): 
    self.val=x
    self.next=None
 
'''
第一種方法:
對于一個長度為n的單鏈表head,用一個大小為n的數(shù)組arr儲存從單鏈表從頭
到尾遍歷的所有元素,在從arr尾到頭讀取元素簡歷一個新的單鏈表
時間消耗O(n),空間消耗O(n)
'''   
def reverse_linkedlist1(head):
  if head == None or head.next == None: #邊界條件
    return head
  arr = [] # 空間消耗為n,n為單鏈表的長度
  while head:
    arr.append(head.val)
    head = head.next
  newhead = ListNode(0)
  tmp = newhead
  for i in arr[::-1]:
    tmp.next = ListNode(i)
    tmp = tmp.next
  return newhead.next
 
'''
開始以單鏈表的第一個元素為循環(huán)變量cur,并設置2個輔助變量tmp,保存數(shù)據(jù);
newhead,新的翻轉(zhuǎn)鏈表的表頭。
時間消耗O(n),空間消耗O(1)
'''
 
def reverse_linkedlist2(head):
  if head == None or head.next == None: #邊界條件
    return head
  cur = head #循環(huán)變量
  tmp = None #保存數(shù)據(jù)的臨時變量
  newhead = None #新的翻轉(zhuǎn)單鏈表的表頭
  while cur:
    tmp = cur.next
    cur.next = newhead
    newhead = cur  # 更新 新鏈表的表頭
    cur = tmp
  return newhead
   
'''
開始以單鏈表的第二個元素為循環(huán)變量,用2個變量循環(huán)向后操作,并設置1個輔助變量tmp,保存數(shù)據(jù);
時間消耗O(n),空間消耗O(1)
'''
 
 
def reverse_linkedlist3(head):
  if head == None or head.next == None: #邊界條件
    return head
  p1 = head #循環(huán)變量1
  p2 = head.next #循環(huán)變量2
  tmp = None #保存數(shù)據(jù)的臨時變量
  while p2:
    tmp = p2.next
    p2.next = p1
    p1 = p2
    p2 = tmp
  head.next = None
  return p1
 
'''
遞歸操作,先將從第一個點開始翻轉(zhuǎn)轉(zhuǎn)換從下一個節(jié)點開始翻轉(zhuǎn)
直至只剩一個節(jié)點
時間消耗O(n),空間消耗O(1)
'''
 
def reverse_linkedlist4(head):
  if head is None or head.next is None:
    return head
  else:
    newhead=reverse_linkedlist4(head.next)
    head.next.next=head
    head.next=None
  return newhead
 
     
def create_ll(arr):
  pre = ListNode(0)
  tmp = pre
  for i in arr:
    tmp.next = ListNode(i)
    tmp = tmp.next
  return pre.next
   
def print_ll(head):
  tmp = head
  while tmp:
    print tmp.val
    tmp=tmp.next
 
a = create_ll(range(5))
print_ll(a) # 0 1 2 3 4
a = reverse_linkedlist1(a)
print_ll(a) # 4 3 2 1 0
a = reverse_linkedlist2(a)
print_ll(a) # 0 1 2 3 4
a = reverse_linkedlist3(a)
print_ll(a) # 4 3 2 1 0
a = reverse_linkedlist4(a)
print_ll(a) # 0 1 2 3 4

到此這篇關于用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié)的文章就介紹到這了,更多相關python 單鏈表翻轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Python設計模式行為型責任鏈模式

    Python設計模式行為型責任鏈模式

    這篇文章主要介紹了Python設計模式行為型責任鏈模式,責任鏈模式將能處理請求的對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理請求為止,避免請求的發(fā)送者和接收者之間的耦合關系,下圍繞改內(nèi)容介紹具有一點的參考價值,需要的朋友可以參考下
    2022-02-02
  • Python SQLAlchemy簡介及基本用法

    Python SQLAlchemy簡介及基本用法

    SQLAlchemy是一個基于Python實現(xiàn)的ORM對象關系映射框架,該框架建立在DB API之上,使用關系對象映射進行數(shù)據(jù)庫操作,這篇文章主要介紹了SQLAlchemy簡介以及基本使用,需要的朋友可以參考下
    2023-08-08
  • python用matplotlib繪制二維坐標軸,設置箭頭指向,文本內(nèi)容方式

    python用matplotlib繪制二維坐標軸,設置箭頭指向,文本內(nèi)容方式

    這篇文章主要介紹了python用matplotlib繪制二維坐標軸,設置箭頭指向,文本內(nèi)容方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python調(diào)用staf自動化框架的方法

    python調(diào)用staf自動化框架的方法

    今天小編就為大家分享一篇python調(diào)用staf自動化框架的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python函數(shù)對象與閉包介紹

    Python函數(shù)對象與閉包介紹

    這篇文章主要介紹了Python函數(shù)對象與閉包,函數(shù)對象指的是函數(shù)可以被當做’數(shù)據(jù)’來處理,具體可以分為四個方面的使用,下文我們就來看看具體的這四種實用方法吧,需要的朋友可以參考一下
    2022-04-04
  • Python的Flask項目中獲取請求用戶IP地址 addr問題

    Python的Flask項目中獲取請求用戶IP地址 addr問題

    這篇文章主要介紹了Python的Flask項目中獲取請求用戶IP地址 addr問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用Python的pencolor函數(shù)實現(xiàn)漸變色功能

    使用Python的pencolor函數(shù)實現(xiàn)漸變色功能

    這篇文章主要介紹了使用Python的pencolor函數(shù)實現(xiàn)漸變色功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python實現(xiàn)PCA降維的示例詳解

    python實現(xiàn)PCA降維的示例詳解

    今天小編就為大家分享一篇python實現(xiàn)PCA降維的示例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 將pytorch轉(zhuǎn)成longtensor的簡單方法

    將pytorch轉(zhuǎn)成longtensor的簡單方法

    今天小編就為大家分享一篇將pytorch轉(zhuǎn)成longtensor的簡單方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python中class(object)的含義是什么以及用法

    python中class(object)的含義是什么以及用法

    這篇文章主要介紹了python中class(object)的含義是什么以及用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論