「LeetCode每日一题」206. 反转链表
206. 反转链表
题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
思路
反转链表比较简单,两种方法都说一下。
迭代
迭代就是遍历的时候,直接改变当前节点next的指针指向前一个元素,你需要前存储前一个元素。
时间复杂度:O(n)
空间复杂度:O(1)
递归
递归主要就是为了做反向,代码也比较好写。
时间复杂度:O(n)
空间复杂度:O(n) 这里使用了递归,递归深度可能到n
方案代码
迭代:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, prev = head, None
while cur:
cur.next, prev, cur = prev,cur, cur.next
return prev
递归:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
nextNode = self.reverseList(head.next)
head.next.next = head
head.next = None
return nextNode
原创文章,作者:flypython,如若转载,请注明出处:http://flypython.com/algorithm/leetcode/157.html
您必须登录才能发表评论。