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

链表反转很熟悉的面试题,关于链表的基础知识就不再累赘了,如何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 算法实战之路:链表

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容