美文网首页Swift编程刷题学编程Leetcode模拟面试
LeetCode 剑指 Offer 24. 反转链表(swift

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

作者: freesan44 | 来源:发表于2021-08-10 10:33 被阅读0次

    题目

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

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

    限制:

    0 <= 节点个数 <= 5000

    解题思路

    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)")
    

    相关文章

      网友评论

        本文标题:LeetCode 剑指 Offer 24. 反转链表(swift

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