单链表逆序

117 阅读1分钟

循环 Loop

节点类

public class ListNode {
    public var val: Int
    public var next: ListNode?
    public init() {
        self.val = 0
        self.next = nil
    }
    
    public init(_ val: Int) {
        self.val = val
        self.next = nil
    }
    
    public init(_ val: Int, _ next: ListNode?) {
        self.val = val
        self.next = next
    }
}

loop 循环逆序

func reverseList(_ head: ListNode?) -> ListNode? {
    var headNode = head
    var pre: ListNode?
    var next: ListNode?
    while headNode != nil {
        next = headNode?.next
        headNode?.next = pre
        pre = headNode
        headNode = next
    }
    return pre
}

递归

func reverseList(_ head: ListNode?) -> ListNode? {
    if head?.next == nil {
        return head
    }
    let pre = reverseList(head?.next)

    head?.next?.next = head
    head?.next = nil

    return pre
}