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                

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

原文地址:https://www.cnblogs.com/bonelee/p/8687153.html