算法

数据结构之 swift 实现链表反转

2018-04-10  本文已影响101人  哈尔湖

链表反转很熟悉的面试题,关于链表的基础知识就不再累赘了,如何swift实现链表的反转。

//定义链表节点
class ListNode {
    var val: Int
    var next: ListNode?
    
    init(_ val: Int) {
        self.val = val
        self.next = nil
    }
}
    func reverList( node: ListNode) -> ListNode {
        
        var last: ListNode?
        var next: ListNode?
        var nodeH: ListNode? = node
        
        while nodeH != nil  {//nodeH 依次尾部移动, nodeH.next 总是last ,中间变量next 为了记录nodeH要向前移动的位置。
            next = nodeH?.next
            nodeH?.next = last
            last = nodeH
            nodeH = next
            
        }
        //循环结束的条件是nodeH == nil 所以头结点是last
        return last!
        
    }

        let alist = ListNode(1)
        let blist = ListNode(2)
        let clist = ListNode(3)
        let dlist = ListNode(4)
        
        alist.next = blist
        blist.next = clist
        clist.next = dlist
        
        let newlist = reverList(node: alist)
        
        print("=======\(newlist.val)")
        print("---------\(newlist.next!.val)")

其他算法参见 故胤道长 Swift 算法实战之路:链表

上一篇下一篇

猜你喜欢

热点阅读