问题描述
Reverse a singly linked list.
A linked list can be reversed either iteratively or recursively. Could you implement both?
反转一个单向链表。
链表可以迭代或递归地反转。你能实现这两个吗?
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
Python 实现
迭代实现:
# 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
"""
# Iteratively.
tmpNode = None
preNode = None
curNode = head
while curNode != None:
# Marked with pointer.
preNode = ListNode(curNode.val)
# Update temp list.
preNode.next = tmpNode
tmpNode = preNode
# Continue to the next node.
curNode = curNode.next
return tmpNode
递归实现:
# 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
"""
# Recursively.
return self.recurse(head, None)
def recurse(self, curNode, tmpNode):
if curNode == None:
return tmpNode
# Update temp list.
head = ListNode(curNode.val)
head.next = tmpNode
return self.recurse(curNode.next, head)