100天精刷LeetCode-Day4:Reverse Linked List问题(附详细思路和python题解)
2020-08-28 16:14
393 查看
206 reverse linked list
题目
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
代码
class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head prev = None cur = head while cur: cur.next, prev, cur = prev, cur, cur.next # 为什么这三种赋值方式只有第一种正确? #cur.next = prev #prev = cur #cur = cur.next # 为什么这样不行呢? # prev, cur, cur.next = cur, cur.next, prev return prev
思考
python 多元赋值是python 的一个特性,原理是tuple的元组封装 (tuple packing) 和 序列拆封(sequence unpacking)
元组封装 (tuple packing) 的逆操作就是序列拆封(sequence unpacking)。这个调用等号右边可以是任何线性序列,序列拆封要求左侧的变量数目与序列的元素个数相同。多元赋值变量交换的例子:
a, b = b, a
就是将(b, a)打包成元祖,再序列的分给(a, b)这个序列
而‘变量’这个定义在python中没有什么意义,更适合的应该叫‘名字’,或者‘标签’,它只是它所指向的对象的一个引用。在这个例子里面,cur和prev是变量,在多元赋值中把标签撕下来指向了别的对象,而cur.next是改变cur所指向对象的值(改变了.next),所以需要考虑顺序问题。
顺序问题需要再做实验去验证。
更新
新的想法,cur.next在左边的意思是:cur所引用的对象的.next属性,是对cur指向的对象的值的改变,而在右侧,cur.next是一个对象,是目前cur所引用对象的.next对象。
试验后,只要cur.next在cur的左边就不会报错了。应该就是这个意思。
recursive 实现
class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head ans = self.reverseList(head.next) head.next.next = head head.next = None return ans
相关文章推荐
- 100天精刷LeetCode-Day5:141 Linked List Cycle问题(附详细思路和python题解)
- 100天精刷LeetCode-Day6:Linked List Cycle2问题(附详细思路和python题解)
- [LeetCode]题解(python):092-Reverse Linked List II
- LeetCode题解:Reverse Linked List II
- leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法
- [LeetCode]题解(python):141-Linked List Cycle
- LeetCode题解:Reverse Linked List
- LeetCode 92 Reverse Linked List II (Python详解及实现)
- Leetcode 206 Reverse Linked List(C++/python)
- [leetcode: Python]206.Reverse Linked List
- LeetCode题解——Reverse Linked List
- 【LeetCode with Python】 Reverse Linked List II
- LeetCode题解-92-Reverse Linked List II
- leetcode题解-92. Reverse Linked List II
- LeetCode题解:Reverse Linked List
- leetcode题解-206. Reverse Linked List
- [LeetCode] Reverse Linked List I II - 链表翻转问题
- LeetCode题解:Reverse Linked List
- [Leetcode with python] 206. Reverse Linked List (# Linked list)
- [leetcode]Reverse Linked List II @ Python