# **Leetcode筆記(Reverse Linked List)**
:::info
:information_source: 題目 : Reverse Linked List, 類型 : linked list , 等級 : easy
日期 : 2023/02/25,2023/05/30,2023/12/03,2024/09/01
:::
### 嘗試
從dp戰場換到這邊,一下子就過了,果然初學者還是要循序漸進的練...
時間複雜度O(n),空間複雜度O(1)
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
previous = None
current = head
while current != None:
tmp = current
current = current.next
tmp.next = previous
previous = tmp
head = previous
return head
```
2023/05/30,看到上面的留言,希望給自己一個加油
```python
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre = None
cur = head
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre # 最後cur會是None,pre是倒反的head,所以不是回傳cur.next
```
2023/07/01,有點忘記linked list的實作方式
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre, cur = None, head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
```
2023/12/03
```python
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre, cur = None, head
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
```
2024/09/01
```python
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre = None
while head:
tmp = head.next
head.next = pre
pre = head
head = tmp
return pre
```
---
### **優化**
步驟,先用一個tmp紀錄current下一個數字(current.next)
current的指標可以反轉回去了(指向previous)
previous更新到下一個(變current)
current更新到下一個(變current再下一個)(也就是tmp)
時間複雜度O(n),空間複雜度O(1)
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
previous = None
current = head
while current != None:
tmp = current.next
current.next = previous
previous = current
current = tmp
head = previous
return head
```
---
**:warning: 錯誤語法**
:::warning
python中沒有null,只有None
:::
**:thumbsup:學習**
:::success
:::
**思路**

**講解連結**
https://www.youtube.com/watch?v=G0_I-ZF0S38
https://hackmd.io/@Hsins/in-place-reversal-of-linked-List
Provided by. NeetCode
###### tags: `linked list` `easy` `leetcode`