zoukankan      html  css  js  c++  java
  • LeetCode206.反转链表

    题目

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

    输入:head = [1,2,3,4,5]
    输出:[5,4,3,2,1]
    示例 2:

    输入:head = [1,2]
    输出:[2,1]
    示例 3:

    输入:head = []
    输出:[]

    提示:
    链表中节点的数目范围是 [0, 5000]
    -5000 <= Node.val <= 5000

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    采用迭代方式完成反转

    1->2->3->4->5
    设置两个变量: 存储上一个节点 prev,存储当前节点 curr
    直到当前节点为空时结束循环:  
       循环内逻辑: 定义next保存当前节点的下一个节点
                   当前节点指向上一个节点
                   上一个节点变成当前节点
                   当前节点变成下一个节点    
    最后返回赋值为最后一个节点的变量prev即可
    

    采用递归方式完成反转

    当前节点为空或已经指向到最后一个节点时结束递归,返回当前节点。
    否则将下一个节点往下递,
    归的过程:将当前节点的下一个节点指向当前节点,将当前节点的指针指向空
    返回新链表头节点
    

    代码

    // 迭代方式 时间复杂度为O(n) n为链表长度 空间复杂度为 O(1)
    func reverseList(head *ListNode) *ListNode {
    // 存储上一个节点,初始化为空
    var prev *ListNode
    // 当前节点
    curr := head
    for curr != nil {
    	// 存储下一个节点
    	next := curr.Next
    	// 将当前节点指向上一个节点
    	curr.Next = prev
    	// 将当前节点作为上一个节点
    	prev = curr
    	// 将下一个节点作为当前节点
    	curr = next
    
    	// 赋值简写 curr.Next,prev,curr = prev,curr,curr.Next
    }
    // 返回结果为上一个节点变量,因为当前节点变量指向为空
    return prev
    }
    
    // 递归方式 时间复杂度 O(n) 空间复杂度 O(n)
    func reverseList2(head *ListNode) *ListNode {
    // 终止条件,当前节点为空或指向到最后一个节点
    if head == nil || head.Next == nil{
    	return head
    }
    // 递
    newHead := reverseList2(head.Next)
    // 归 将当前节点的下一个节点指向当前节点
    head.Next.Next = head
    // 将当前节点指向空
    head.Next = nil
    return newHead
    }
  • 相关阅读:
    LeetCode 109 Convert Sorted List to Binary Search Tree
    LeetCode 108 Convert Sorted Array to Binary Search Tree
    LeetCode 107. Binary Tree Level Order Traversal II
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 103 Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 104. Maximum Depth of Binary Tree
    接口和多态性
    C# 编码规范
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15030070.html
Copyright © 2011-2022 走看看