---
# System prepended metadata

title: 206. Reverse Linked List
tags: [Leetcode, Python]

---

# 206. Reverse Linked List
###### tags: `Python`,`Leetcode`
https://leetcode.com/problems/reverse-linked-list/
## MyCode!![](https://i.imgur.com/IKY0CV1.png)
## 解題思路:
* **Defnition of Linked list :**
   1. 使用 node (節點)來記錄、表示、儲存資料( data )，並利用每個 node 中的 pointer 指向下一個 node ，藉此將多個 node 串連起來，形成 Linked list ，並以 NULL 來代表 Linked list 的終點
   2. 通常在面對一個 Linked list 時，能夠公開存取( access )的 node 只有「第一個 node 」![](https://i.imgur.com/pFf8KHi.png)
* **Linked List Introduction:**(補充資料)
 http://alrightchiu.github.io/SecondRound/linked-list-introjian-jie.html
* 這一題要 Reverse，所以需要把所有的 pointer 轉向即可：
   1. 需要三塊記憶體，分別記憶：要新指向的 node（ previous ） 、原先紀錄的 node ( current )、下一個要進入轉向流程的 node ( perceeding )![](https://i.imgur.com/X0gWlC8.png)

      * current.next 是 perceeding node
      * previous 是下一個 current.next 要指向的 node
   3. 完成這三個指標後，需要執行的步驟：
      * current.next 指向 previous
      * current = perceeding （移動 current 至下一個 node ）
      * perceeding = perceeding.next （把 perceeding 移動到下一個 node）![](https://i.imgur.com/wBYp8Kj.png)
## 解法
### Step 1:如果 input 是空的 node ，結束這段程式，無需輸出任何東西
### Step 2：如果 node.next( 即 perceeding )!= Null，就要轉向
* previous = 0 ，previous 是第二個要被轉向指到的 node ，但最尾巴的 node 都會指向 Null，全域參數設為 0 
* current = head，從第一個 node 開始要改變他的 pointer 方向
* perceeding = current ， current 轉向後，下一個要轉向的 node 記憶體
### 流程梳理
1. 如果 node.next( 即 perceeding )!= Null，開始執行下列幾點步驟
2. 把 current.next = previous (把 current pointer 轉向)
3. 把 previous = current （把下一個要轉向被指到的 node 放入 previous 的記憶體）
4. 把 current = perceeding（把下一個有 pointer 要轉向的 node 放入 current 記憶體）
5. perceeding = perceeding.next（後移 perceeding 記憶下一個 node ）
   * 全部都轉完了，current.next = previous （轉完最後一個）
   * head = current
   * return head node

