最近在刷力扣上的题目,之前也刷过很多次,一边刷一边忘,很是苦恼。
为什么边学边忘,很大程度是没有应用场景,只是被动的进行填鸭式学习。
为了提高学习效率,觉得还是得坚持写博客,一方面强化记忆,第二强迫自己创造应用场景,学习知识的同时也在产生知识。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list/
一分钟教你链表反转
"""
反转一个单链表。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
"""
# Definition for singly-linked list.
class ListNode:
def __init__(self, x, next=None):
self.val = x
self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head is None or head.next is None:
return head
last = None # 前置节点
while head:
tmp = head.next # 保存当前节点的下一个节点,不可缺,因为后面更改了当前节点的next指向
head.next = last # 更改当前节点的next为上一个节点
last = head # 将上一个节点移动到当前节点
head = tmp # 当前节点移动到下一个节点
# head.next, last, head = last, head, head.next ,简写样式,提高运行速度
return last
if __name__ == '__main__':
# 创建一个1-5的链表
a = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5,)))))
obj = Solution()
Node = obj.reverseList(a)
while Node:
print(Node.val)
Node = Node.next