初级算法-链表-反转链表

作者: coenen | 来源:发表于2021-08-27 07:33 被阅读0次
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
反转链表示例.jpg
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
摘一个示例做个说明.
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
条件分析:
  1. 单链表头节点 -> 需要从头节点开始反转
解决思路1:
  1. 根据分析1,采用迭代方式进行反转
先定义返回的空链表和循环链表(需要反转的链表).然后当循环链表不空的时候进行循环(即链表没有到尾节点),定义临时变量为循环链表的next,然后让循环链表的next指向返回链表.返回的链表为循环链表.然后循环链表为临时链表(即下一个节点后的链表)
func reverseList(_ head: ListNode?) -> ListNode? {
    // 返回链表
    var newHead: ListNode? = nil
    // 循环节点
    var old = head
    while old != nil {
        // 先定义临时变量存储next
        let tmp = old?.next
        // 节点指向返回链表(定义新链表承接)
        old?.next = newHead
        // 返回链表等于循环链表
        newHead = old
        // 让循环链表为临时变量,进行继续循环
        old = tmp
    }
    
    return newHead
}
解决思路2:
  1. 根据分析1,采用递归方式进行反转
先判断链表是否为空或者单节点链表,是则直接返回(也用以结束递归).然后开始递归节点,直到尾节点结束递归.然后从尾部开始反转链表节点.直到头节点.然后置空头节点的next即可.
func reverseList(_ head: ListNode?) -> ListNode? {
    // 单链表和空链表直接返回
    if head == nil || head?.next == nil{
        return head
    }
    // 递归调用,直到尾节点
    let node : ListNode? = reverseList(head?.next)
    // 直接反转链表节点指向
    head?.next?.next = head
    // 最后next置空
    head?.next = nil
    return node
}

测试用例:

let endNode = ListNode.init(0)
let fourNode = ListNode.init(1)
fourNode.next = endNode
let threeNode = ListNode.init(2)
threeNode.next = fourNode
let secondNode = ListNode.init(3)
secondNode.next = threeNode
let firstNode = ListNode.init(4)
firstNode.next = secondNode
let headNode = ListNode.init(5)
headNode.next = firstNode

考察要点:

  • 递归
  • 链表

相关文章

  • 数据结构 - 单向链表及相关算法

    单向链表 链表常见算法 链表反转

  • 初级算法-链表-反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 进阶:链表可以选用迭代或递归方式完成反转。你能...

  • LeetCode初级算法--链表01:反转链表

    LeetCode初级算法--链表01:反转链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事...

  • 链表类算法题汇总

    算法题目中常考察的链表操作无非以下几种: 链表反转 链表合并 寻找链表中点 寻找链表倒数第 K 个节点 删除链表节...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 链表

    链表是一类大的算法题。 一般分为一下几部分: 链表反转 链表合并 我们分别进行下讨论。 1. 链表反转比较典型的例...

  • 单链表

    单链表一些相关的算法集锦,单链表的算法可以提高逻辑能力。 反转链表 最基本的链表的题目,很简单的迭代操作,需要注意...

  • 单链表反转问题

    基本问题 如何将单链表反转? 单链表结构定义 算法实现 进阶问题 如何将单链表在指定区间内进行反转? 问题分析 这...

  • 5个链表的常见操作

    链表 链表反转 LeetCode206:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 环路检...

  • JZ-015-反转链表

    反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。题目链接: 反转链表[https://www.no...

网友评论

    本文标题:初级算法-链表-反转链表

    本文链接:https://www.haomeiwen.com/subject/hwkdiltx.html