鏈表反轉(zhuǎn)很熟悉的面試題,關(guān)于鏈表的基礎(chǔ)知識就不再累贅了,如何swift實現(xiàn)鏈表的反轉(zhuǎn)。
- 傳入鏈表的頭結(jié)點 返回一個翻轉(zhuǎn)后的頭結(jié)點
- 兩個指針遍歷反轉(zhuǎn)
//定義鏈表節(jié)點
class ListNode {
var val: Int
var next: ListNode?
init(_ val: Int) {
self.val = val
self.next = nil
}
}
- 反轉(zhuǎn)函數(shù)
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
}
//循環(huán)結(jié)束的條件是nodeH == nil 所以頭結(jié)點是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 算法實戰(zhàn)之路:鏈表