網站首頁 編程語言 正文
定義鏈表node結構:
class ListNode: ? ? ? def __init__(self,data): ? ? ? ? self.data = data ? ? ? ? self.next = None
將L轉化為鏈表:
def make_list(L):
將L初始化為鏈表:
? head = ListNode(L[0]) ? ? cur = head ? ? for i in L[1:]: ? ? ? ? cur.next = ListNode(i) ? ? ? ? cur = cur.next ? ? return head ?
遍歷鏈表:
def print_list(head): ? ? ? cur = head ? ? while cur != None: ? ? ? ? print(cur.data,end=' ') ? ? ? ? cur = cur.next ?
遞歸法 ?反轉鏈表:
def reverse_list(head):
三要素:
- 1.明確函數功能,該函數可以將鏈表反轉,并返回一個頭節點
- 2.結束條件:當鏈表為空或只有一個節點時返回
? ? if head==None or head.next==None: ? ? ? ? return head
- 3.等價條件(縮小范圍),對于數組來講,縮小范圍是n——>n-1,對于鏈表來講則可以考慮
head
——
>head.next ? ? reverse = reverse_list(head.next) ?#假設reverse是head以后的、已經反轉過的鏈表
接下來要做的是將head節點接到已經反轉過的reverse上:
? ? tmp = head.next ? ? tmp.next = head ? ? head.next = None ?return reverse ?#返回新的列表
迭代法:
def reverse_list2(head): ? ? #print_list(head) ? ? cur = head ? ? pre = None ? ? while cur: ? ? ? ? tmp = cur.next ? ? ? ? cur.next = pre ? ? ? ? pre = cur ? ? ? ? cur = tmp ? ? head = pre ? ? return head ? if __name__ == '__main__': ? ? ? L = [3,2,7,8] ? ? head = make_list(L) ?
正序打印:
? ? print('原始list:') ? ? print_list(head) ? ? print('\n') ?
反轉后打印:
? ? revere = reverse_list(head) ? ? print('反轉一次的list:') ? ? print_list(revere) ? ? print('\n') ?
反轉2:
? ? print('head is') ? ? print_list(head) ?#發現此時head節點變成了最后一個節點,說明函數是對head這個實例直接作用的 ? ? print('\n') ? ? ? # print('revere is') ? ? # print_list(revere) ? ? # print('\n') ? ? ? print('反轉兩次的list:') ? ? print_list(reverse_list2(revere))
原文鏈接:https://blog.csdn.net/qq_34062683/article/details/121308565
相關推薦
- 2023-01-29 React更新渲染原理深入分析_React
- 2022-05-01 Windows系統安裝redis數據庫_Redis
- 2022-04-09 Webservice 服務請求參數xml 嵌套問題/CDATA嵌套
- 2022-04-15 python尋找含有關鍵字文件和刪除文件夾方式_python
- 2022-04-09 windows一鍵啟動多個bat批處理文件或者啟動多個cmd窗口執行命令
- 2023-04-07 React?Fiber構建completeWork源碼解析_React
- 2021-12-07 C語言SetConsoleTextAttribute函數使用方法_C 語言
- 2022-07-16 css盒子模型和css邊框屬性
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支