题目 - Palindrome Linked List
难度:简单
分析
快慢指针 + 反转链表
代码
func isPalindrome(_ head: ListNode?) -> Bool {
// 通过快慢指针找到中间的节点,然后从头节点开始到中间节点遍历,中间节点到尾节点遍历,比较
var slow = head, fast = head, dummy: ListNode? = nil
// reverse first half
while fast != nil && fast!.next != nil {
fast = fast!.next!.next
let nextNode = slow!.next
slow!.next = dummy
dummy = slow
slow = nextNode
}
if fast != nil {
if slow == nil {
return true
}
slow = slow!.next
}
while slow != nil {
if slow!.val != dummy!.val {
return false
}else {
slow = slow!.next
dummy = dummy!.next
}
}
return true
}