前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 剑指 Offer 24. 反转链表(swift)

LeetCode 剑指 Offer 24. 反转链表(swift)

原创
作者头像
freesan44
修改2021-08-18 14:25:20
3270
修改2021-08-18 14:25:20
举报
文章被收录于专栏:freesan44freesan44

题目

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

代码语言:txt
复制
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

解题思路

代码语言:txt
复制
public class ListNode {
    public var val: Int
    public var next: ListNode?
    public init(_ val: Int) {
        self.val = val
        self.next = nil
    }
}
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */
class Solution {
    func reverseList(_ head: ListNode?) -> ListNode? {
        var frontNode = head
        var backNode = head?.next
        // 边界问题处理
        if backNode == nil || frontNode == nil {
            return frontNode
        }
        // 初始节点指向nil
        frontNode?.next = nil
        while backNode!.next != nil {
            // 临时缓存下一个节点
            let tempNode = backNode!.next
            // 把backNode的指向反转
            backNode?.next = frontNode
            // 把指针移向反转后的节点
            frontNode = backNode
            // 把back指针移到下一个节点
            backNode = tempNode
        }
        backNode!.next = frontNode
        return backNode
    }
}

let node2 = ListNode(2)
let node3 = ListNode(3)
let node4 = ListNode(4)
node2.next = node3
node3.next = node4
let res = Solution().reverseList(node2)
print("res:\(res?.val)\(res!.next!.val)\(res!.next!.next!.val)\(res!.next!.next!.next)")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档