題目
定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表并輸出反轉后鏈表的頭節點。
示例:
輸入: 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)")