反转链表

NC78 反转链表

链表,最基础的数据结构,非连续、非顺序存储结构。

单向链表反转的解法一般有两种:

解法一:递归

func ReverseList ( _ head: ListNode?) -> ListNode? {
        // 结束条件:当前节点为空或下一节点为空,则当前已到达链表尾部
        if head == nil || head?.next == nil {
            return head
        }
        // 递归至链表末尾
        let result = ReverseList(head?.next)
        // 将当前节点下一节点的的下一节点置为当前节点
        // 当前节点的下一节点置为空
        // 反转完成
        head?.next?.next = head
        head?.next = nil
        return result
}

解法二:迭代

func ReverseList ( _ head: ListNode?) -> ListNode? {
        // 声明reversed用于指向反转后的节点    
        var reversed: ListNode?
        var current = head
        while current != nil {
                // 临时保存当前节点的下一节点
                let next = current?.next
                // 将当前节点下一节点指向结果
                current?.next = reversed
                // 结果指向当前节点
                reversed = current
                // 当前节点指向下一节点
                current = next
        }
        return reversed
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录一.反转整个链表二.反转链表前 N 个节点三.反转链表的一部分(区间范围)四.K个一组反转链表 一、反转整个链...
    我shi杰迷阅读 557评论 0赞 0
  • 当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行...
    zzpwestlife阅读 709评论 0赞 3
  • 主要介绍链表的简单用法以及单链表反转。网上的实现有很多,使用 OC/C 来实现的没有几个。 一、链表的基本用法 链...
    CoderHG阅读 1,492评论 0赞 8
  • 最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转。闲来无事,决定就这个问题进行一番尝试。 ...
    冬天里的懒喵阅读 4,209评论 1赞 14
  • 给定一个单链表 list,请将它反转后返回,示例: 原链表: 反转链表: 定义的单链表结点类结构如下: 我们先写两...
    calvinit阅读 491评论 0赞 1

友情链接更多精彩内容