206 反转链表
2022/9/1 23:26:06
本文主要是介绍206 反转链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目206 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
双指针思路:
- 定义指针cur指向head,定义指针pre,定义为None,作为链表的最后节点的指向节点
- 然后开始反转了,定义一个临时指针temp保存cur.next节点,因为反转后cur指针的next指向pre,不在是原先的cur.next节点了,将cur->next 指向pre,此时已经反转了第一个节点了。
- 接下来,就是循环走如下代码逻辑了,继续移动pre和cur指针。
- 最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。 此时我们return pre指针就可以了,pre指针就指向了新的头结点。
注意:本来考虑head和head.next是否为空,最后发现为空也不影响结果。
代码
# 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]: # if head != None and head.next != None: # pre = None # cur = head # while cur != None: # temp = cur.next # cur.next = pre # pre = cur # cur = temp # return pre # return head pre = None cur = head while cur != None: temp = cur.next cur.next = pre pre = cur cur = temp return pre
递归思路
建议双指针思路,递归直接不容易写,但是根据双指针代码,可以写出递归代码。
# 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 = None # cur = head # while cur != None: # temp = cur.next # cur.next = pre # pre = cur # cur = temp # return pre return self.reverse(None, head) def reverse(self, pre, cur): while cur != None: temp = cur.next cur.next = pre return self.reverse(cur, temp) return pre
这篇关于206 反转链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?