老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

用python介紹4種常用的單鏈表翻轉的方法小結-創新互聯

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

創新互聯公司于2013年成立,先為羅山等服務建站,羅山等地企業,進行企業商務咨詢服務。為羅山企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

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

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

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

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

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

# -*- coding: utf-8 -*-
'''
鏈表逆序
'''
class ListNode: 
  def __init__(self,x): 
    self.val=x
    self.next=None
 
'''
第一種方法:
對于一個長度為n的單鏈表head,用一個大小為n的數組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
 
'''
開始以單鏈表的第一個元素為循環變量cur,并設置2個輔助變量tmp,保存數據;
newhead,新的翻轉鏈表的表頭。
時間消耗O(n),空間消耗O(1)
'''
 
def reverse_linkedlist2(head):
  if head == None or head.next == None: #邊界條件
    return head
  cur = head #循環變量
  tmp = None #保存數據的臨時變量
  newhead = None #新的翻轉單鏈表的表頭
  while cur:
    tmp = cur.next
    cur.next = newhead
    newhead = cur  # 更新 新鏈表的表頭
    cur = tmp
  return newhead
   
'''
開始以單鏈表的第二個元素為循環變量,用2個變量循環向后操作,并設置1個輔助變量tmp,保存數據;
時間消耗O(n),空間消耗O(1)
'''
 
 
def reverse_linkedlist3(head):
  if head == None or head.next == None: #邊界條件
    return head
  p1 = head #循環變量1
  p2 = head.next #循環變量2
  tmp = None #保存數據的臨時變量
  while p2:
    tmp = p2.next
    p2.next = p1
    p1 = p2
    p2 = tmp
  head.next = None
  return p1
 
'''
遞歸操作,先將從第一個點開始翻轉轉換從下一個節點開始翻轉
直至只剩一個節點
時間消耗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種常用的單鏈表翻轉的方法小結-創新互聯
網頁鏈接:http://www.xueling.net.cn/article/cdgoes.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 一区二区三区伦理片 | 久久久女人与动物群交毛片 | 色视频免费在线观看 | 麻豆乱码国产一区二区三区的优势 | 国产又粗又黄又爽又硬的软件 | 亚洲国产精品久久久久婷婷软件 | 成人久久久精品乱码一区二区三区 | 又粗又大又硬毛片免费看 | 一区网站在线观看 | www.黄色免费网站 | 国产精品久久久久久久久亚洲美女 | 800av凹凸视频在线观看 | 亚洲网中文字幕 | 東热精品中字久久无码五月天 | 夜夜欢天天干 | 日本大片免a费观看视频 | 亚洲熟妇无码AV在线观看 | 日本aaaa片毛片免费观蜜桃 | 国产欧美成人精品第二区 | 日本午夜网站 | а∨天堂一区一本到 | 性a欧美片| 国产在线亚州精品内射 | 日本丰满熟妇乱XXXXX故事 | 日日夜夜狠狠干 | 国产精品1页| 熟女人妻aⅴ一区二区三区60路 | 成在人线AV无码免观看蜜芽 | 精品无码国产AV一区二区三区 | 亚洲午夜色 | 日韩黄色影视 | 国产二区免费视频 | 亚洲中文字幕婷婷在线 | 欧美在线精品一区 | 阳茎伸入女人阳道视频免费 | 亚洲第九十七页 | 亚洲天堂AV在线 | 中文字幕在线2021一区 | 欧美人与动人物牲交免费观看久久 | 无码av中文字幕免费放 | 九九精品视频免费 |