Leetcode 系列 | 反转链表
點擊上方“算法猿的成長”,選擇“加為星標”
第一時間關注 AI 和 Python 知識
最近會更新一個 leetcode 的刷題系列,每次更新一道題目,并且通過畫圖輔助介紹自己的解題思路,大家如果有更好的解題思路也歡迎在文末留言,或者公眾號后臺回復,也可以添加我微信,進行交流,謝謝!
題目 | 206_Reverse_Linked_List
鏈接 | https://leetcode.com/problems/reverse-linked-list/
題目
給定一個鏈表,反轉并輸出結果。
示例
Input: 1->2->3->4->5->NULL
思路
反轉一個單鏈表,首先肯定需要遍歷這個單鏈表,在遍歷的時候就希望修改當前結點的?next?指針,指向其前一個結點,因此肯定需要一個保存前一個結點的變量,也就是反轉后鏈表的頭部指針。
實現的思路應該是這樣的:
首先定義一個?prev?保存前一個結點,curr?保存當前結點,然后還有一個?nxt?保存下一個結點,其中?prev?就是最終的反轉鏈表的頭結點;
先讓?nxt?保存下一個結點;
然后改變?curr?的?next?指針,指向前一個結點,即?prev?;
接著,讓?prev = curr?;
最后,就是讓?curr = nxt,指向下一個結點
重復 2-5 步,直到當前結點為空。
下圖展示了上述幾個步驟的過程:
實現
方法1
class?ListNode:def?__init__(self,?x):self.val?=?xself.next?=?Noneclass?Solution:def?reverseList(self,?head:?ListNode)?->?ListNode:if?not?head?or?not?head.next:return?headprev,curr?=?None,headwhile?curr:nxt?=?curr.nextcurr.next?=?prevprev?=?currcurr?=?nxtreturn?prev方法2:更加簡潔的版本
class?ListNode:def?__init__(self,?x):self.val?=?xself.next?=?Noneclass?Solution:def?reverseList(self,?head:?ListNode)?->?ListNode:reversed_head?=?Nonecurrent?=?headwhile?current:reversed_head,?reversed_head.next,?current?=?current,?reversed_head,?current.nextreturn?reversed_headgithub地址:
https://github.com/ccc013/DataStructe-Algorithms_Study/blob/master/Python/Leetcodes/206_Reverse_Linked_List.py
留言時間
歡迎關注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
如果覺得不錯,在看、轉發就是對小編的一個支持!
總結
以上是生活随笔為你收集整理的Leetcode 系列 | 反转链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单例模式基础笔记
- 下一篇: 最好用的OCR实时翻译工具:Bob fo