鍊錶 (翻轉鍊錶)的兩種演算法

2021-10-23 02:43:15 字數 1182 閱讀 4685

# -*- coding:utf-8 -*-

"""

author: leadingme

mail:[email protected]

mywebsite:leadingme.top

"""# 翻轉鍊錶

""" 演算法要求: 翻轉乙個單鏈表(不帶頭節點)

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

"""def

reverselinklist

(head)

:"""

:param head:

:return:head

"""vallist =

pointer = head

while pointer:

# 將鍊錶的值依次取出

pointer = pointer.

next

pointer = head

while vallist:

# 將列表的值反向賦給鍊錶的每個節點的val屬性

pointer.val = vallist.pop(

) pointer = pointer.

next

return head

def

reservelinklist2

(head)

:"""

:param head:

:return: head

"""if head is

none

:# 鍊錶為空

return

none

pre = next = head

if next.

next

isnone

:# 鍊錶只有乙個頭節點

return head

else

: pre =

none

while next is

notnone

: next = next.

next

head.

next

= pre

pre = head

head = next

return head

反轉鍊錶(兩種實現)

反轉鍊錶反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 方法一 前插法 這道題目我們可以先建立乙個新的表頭,然後按正序每抓取到乙個原鍊錶的節點,就前插到這個新的煉表裡,最後我們就可以得到乙個恰好為原鍊錶反序的新鍊錶 struct listnode rev...

經典演算法 鍊錶翻轉

比如說乙個鍊錶先是這樣,40 5 0 60 反過來就應該是 60 0 5 40 函式如下 static void reverse struct node head ref head ref prev 代表著最後乙個 傳進去的引數是煉表頭 原理就是把鍊錶都反過來指,最後乙個指向倒數第二個,方法是通過上...

初級演算法 翻轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路1 迭代 思路很簡單 使用三個指標 迴圈使後乙個指向前乙個 再用第三個指標儲存沒有翻轉的剩餘指標的位置 自己敲得程式執行不出結果 class...