题目描述
题目分析
这题我使用了两种方式来求解。相同点是都先对链表进行遍历,把其中的值取出。不同点是第一种方法采用的是数组来保存数据,然后分别拿首尾的数据进行比对,判断是否回文;而第二种方法是在遍历的过程中生成正反两个字符串,最后判断两个字符串是否相等,如果相等则是回文。
解法一
class Solution {
func isPalindrome(_ head: ListNode?) -> Bool {
if head == nil {
return true
}
var temp = head
var listArray = [Int]()
while temp != nil {
listArray.append(temp!.val)
temp = temp?.next
}
let count = listArray.count
for i in 0...count/2 {
if listArray[i] != listArray[count-1-i] {
return false
}
}
return true
}
}
解法二
class Solution2 {
func isPalindrome(_ head: ListNode?) -> Bool {
if head == nil {
return true
}
var temp = head
var string = ""
var stringRevarse = ""
while temp != nil {
string = string + String(temp!.val)
stringRevarse = String(temp!.val) + stringRevarse
temp = temp?.next
}
if stringRevarse == string {
return true
}else {
return false
}
}
}
两种方法比较
相比之下,第一种方法运行速度和所占的内存更优一些,故数组效率较高。