最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用python介紹4種常用的單鏈表翻轉的方法小結

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

如何把一個單鏈表進行反轉?

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

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

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

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

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

# -*- 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,新的翻轉鏈表的表頭。
時間消耗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 #新的翻轉單鏈表的表頭
  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
 
'''
遞歸操作,先將從第一個點開始翻轉轉換從下一個節(jié)點開始翻轉
直至只剩一個節(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種常用的單鏈表翻轉的方法小結的文章就介紹到這了,更多相關python 單鏈表翻轉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • python基礎之變量與內(nèi)存管理方式

    python基礎之變量與內(nèi)存管理方式

    本文介紹了變量的定義、賦值、使用原則、命名規(guī)范、內(nèi)存管理以及變量的特征,變量是程序中可變化的量,需要先定義后使用,可多次更改值,Python作為弱類型語言,變量無需聲明類型即可賦值
    2024-09-09
  • 基于Python實現(xiàn)貪吃蛇小游戲(附源碼)

    基于Python實現(xiàn)貪吃蛇小游戲(附源碼)

    本次我們將編寫一個貪吃蛇的游戲。通過鍵盤上、下、左、右控制小蛇上、下、左、右移動,吃到食物后長度加1;蛇頭碰到自身或窗口邊緣,游戲失敗,需要的可以參考一下
    2022-11-11
  • Python的Tornado框架實現(xiàn)異步非阻塞訪問數(shù)據(jù)庫的示例

    Python的Tornado框架實現(xiàn)異步非阻塞訪問數(shù)據(jù)庫的示例

    Tornado框架的異步非阻塞特性是其最大的亮點,這里我們將立足于基礎來介紹一種簡單的Python的Tornado框架實現(xiàn)異步非阻塞訪問數(shù)據(jù)庫的示例:
    2016-06-06
  • 淺談一下四則運算和二叉樹

    淺談一下四則運算和二叉樹

    這篇文章主要淺談一下四則運算和二叉樹,因為總是見到把?四則運算表達式?用?樹?的形式來展示,所以就想著給定一顆表達式樹,計算它的結果出來,需要的朋友可以參考下
    2023-04-04
  • Python讀取本地文件并解析網(wǎng)頁元素的方法

    Python讀取本地文件并解析網(wǎng)頁元素的方法

    今天小編就為大家分享一篇Python讀取本地文件并解析網(wǎng)頁元素的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Pycharm項目代碼同步到Gitee的圖文步驟

    Pycharm項目代碼同步到Gitee的圖文步驟

    本文主要介紹了Pycharm項目代碼同步到Gitee的圖文步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法

    python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法

    今天小編就為大家分享一篇python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python實現(xiàn)常見限流算法的示例代碼

    Python實現(xiàn)常見限流算法的示例代碼

    在系統(tǒng)的穩(wěn)定性設計中,需要考慮到的就是限流,避免高并發(fā)環(huán)境下一下子把服務整垮了,本文為大家整理了一些Python實現(xiàn)的常見限流算法,希望對大家有所幫助
    2024-03-03
  • 學好python基本數(shù)據(jù)類型

    學好python基本數(shù)據(jù)類型

    這篇文章主要介紹了學好python基本數(shù)據(jù)類型,學習python基本數(shù)據(jù)類型我們需要了解基本數(shù)據(jù)類型有數(shù)字int、布爾值bool、字符串str、列表list、元組tuple、字典dict等,其中包括他們的基本用法和其常用的方法,下面來看看文章的具體介紹吧
    2021-12-12
  • Python OpenCV閾值處理詳解

    Python OpenCV閾值處理詳解

    閾值處理是一種簡單、有效的將圖像劃分為前景和背景的方法。圖像分割通常用于根據(jù)對象的某些屬性(例如,顏色、邊緣或直方圖)從背景中提取對象。本文將為大家詳細介紹OpenCV中的閾值處理,需要的可以參考一下
    2022-02-02

最新評論

温宿县| 河池市| 宣汉县| 宝兴县| 靖远县| 正宁县| 界首市| 香格里拉县| 汉川市| SHOW| 江门市| 万全县| 永安市| 大邑县| 廊坊市| 旌德县| 武鸣县| 同仁县| 新乐市| 庐江县| 汝南县| 临颍县| 栾城县| 彰化县| 沂南县| 虹口区| 崇明县| 芦溪县| 新和县| 楚雄市| 九龙县| 吉木萨尔县| 永济市| 黑山县| 永和县| 栾城县| 江孜县| 天津市| 碌曲县| 冕宁县| 新余市|