Description
Reverse a singly linked list.
Code
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class 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
题目没要求最后的节点还是之前的节点,所以也可以生成个新的链表,将值反过来就行了。不过个人还是喜欢这种追求极致的算法,能不多花销空间和时间就不去花销。