LeetCode 劍指 Offer 24. 反轉鏈表(swift)

題目

定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表并輸出反轉后鏈表的頭節點。

示例:

輸入: 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)")
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容