leetcode 206. Reverse Linked List

Reverse a singly linked list.

click to show more hints.

复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head: return None
        pre_node = head
        next_node = head.next
        pre_node.next = None
        while next_node:
            tmp = next_node.next
            next_node.next = pre_node
            pre_node = next_node
            next_node = tmp
        return pre_node        
复制代码

精简下代码:

复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head: return None
        pre_node = None
        cur_node = head
        while cur_node:
            tmp = cur_node.next
            cur_node.next = pre_node
            pre_node = cur_node
            cur_node = tmp
        return pre_node        
复制代码

 

递归解:

复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        def reverse_node(pre_node, cur_node):
            if not cur_node: return pre_node
            next_node = cur_node.next
            cur_node.next = pre_node
            return reverse_node(cur_node, next_node)
             
        if not head: return None
        new_head = reverse_node(head, head.next)
        head.next = None
        return new_head                                  
复制代码

dfs

复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next: return head
        node = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return node                
复制代码

记得程序员面试金典里专门提过!

posted @   bonelee  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2017-04-01 信息检索导论的课件——http://home.ustc.edu.cn/~zhufengx/ir/pdf/
2017-04-01 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
2017-04-01 varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位
点击右上角即可分享
微信分享提示