leetcode#206. Reverse Linked List

来源:互联网 发布:哪个运营商的4g网络快 编辑:程序博客网 时间:2024/05/17 22:19

Description

Reverse a singly linked list.

Code

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    newHead = ListNode(0)    def reverseList(self, head):        """        :type head: ListNode        :rtype: ListNode        """        if head == None:            return head        else:               self.rvsList(head)            head.next = None            return self.newHead    def rvsList(self, node):            if node.next != None:                nxt = self.rvsList(node.next)                nxt.next = node            else:                self.newHead = node            return node

这是递归的算法,还有while循环的做法:
author: nderkach

def reverse_list(head):    cur_node = head    prev_node = None    next_node = None    while cur_node:        next_node = cur_node.next        cur_node.next = prev_node        prev_node = cur_node        cur_node = next_node    return prev_node

Conclusion

题目没要求最后的节点还是之前的节点,所以也可以生成个新的链表,将值反过来就行了。不过个人还是喜欢这种追求极致的算法,能不多花销空间和时间就不去花销。