Reverse a singly linked list.
Solution: 创建before, cur, after指针。
Time Complexity: O(n)
Solution1: Recursive
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @return {ListNode}
def __init__(self):
self.before = None
def reverseList(self, head):
cur = head
if cur is None:
return self.before
after = cur.next
cur.next = self.before
self.before = cur
cur = after
return self.reverseList(cur) #don't forget 'return' here
Solution2: Iteration.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @return {ListNode}
def reverseList(self, head):
if head is None or head.next is None:
return head
before = None
cur = head
while cur is not None:
after = cur.next
cur.next = before
before = cur
cur = after
return before