【python資料結構與演算法】LeetCode:反轉連結串列
阿新 • • 發佈:2019-01-03
題目連結:https://leetcode-cn.com/problems/reverse-linked-list/
介紹一下反轉連結串列的思路:
首先,先明確一下輸入:輸入為一個連結串列的頭結點head
具體步驟:
- 先判斷頭結點或頭結點的next屬性head.next 是否為None。若是,直接返回該頭結點,說明該連結串列為空或者長度為1,沒有反轉必要;
- 申請兩個變數:
- last變數:初始為None,記錄當前操作的節點的前一個節點(也就是反轉後的連結串列的last(下一個)節點)
- tmp變數:初始為None,記錄當前節點的next節點(也就是翻轉後的連結串列的前面一個節點)
- 使用while迴圈,判斷當前節點(即head)是否為空;
- 若為空,先將當前的head節點的next屬性用tmp變數記錄,然後再將last記錄的上一個節點賦值給head.next。這一操作就是將當前節點的next指標指向上一個節點last,這也是反轉連結串列的核心;與此同時防止原來head.next指標指向的下一個節點丟失,所以用tmp暫時記錄一下
- 然後,再將當前節點head賦值給last,將剛剛tmp記錄的現節點的next節點賦值給head,即last(前一個節點)和head(當前節點)均向前走一步
- 最終,噹噹前節點head為空的時候,返回其上一個節點,這就是新的反轉過的連結串列的頭結點。
上程式碼:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head is None or head.next is None: return head last,tmp = None,None while head: tmp = head.next head.next = last last = head head = tmp return last