Swift - LeetCode - 反转链表

作者: 依赖糊涂 | 来源:发表于2019-02-26 16:07 被阅读12次

    题目

    反转一个单链表。

    示例:

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

    进阶:

    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    方案一:
    • 迭代:通过while 迭代反转链表
    /**
    public class SingNode {
        public var value : Int
        public var nextNode: SingNode?
        
        public init(value:Int) {
            self.value = value
        }
    }
     **/
     func reverseList(_ head:SingNode?) -> SingNode? {
            if head == nil || head?.nextNode == nil {
                return head
            }
            
            var newNode:SingNode? = nil
            var p = head
            while p != nil {
                let temp = p?.nextNode
                p?.nextNode = newNode
                newNode = p
                p = temp
            }
            return newNode
        }
    
    方案二:
    • 迭代: 迭代反转链表
    /**
    public class SingNode {
        public var value : Int
        public var nextNode: SingNode?
        
        public init(value:Int) {
            self.value = value
        }
    }
     **/
    func reverseList(_ head: SingNode?) -> SingNode? {
        if head == nil || head?.next == nil {
            return head
        }
    
        let newHead = reverseList(head?.next)
        head?.next?.next = head
        head?.next = nil
        return newHead
       }
    

    相关文章

      网友评论

        本文标题:Swift - LeetCode - 反转链表

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