题目描述:
请判断一个链表是否为回文链表。
例子:
输入: 1->2
输出: false
输入: 1->2->2->1
输出: true
思路:
遍历链表中的元素到一个集合中
使用双指针遍历链表中的元素,一个指针指向list集合的头部,一个指向list集合的尾部,判断两个指针指向的元素是否相同,不相同就返回false,否则就第一个指针后移,第二个指针前移,继续判断,直到第二个指针到第一个指针的左边。
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> value = getValue(head);
int i = 0 ;
int j = value.size() - 1 ;
while ( i < j){
if (!value.get(i).equals(value.get(j))){
return false ;
}
i++ ;
j-- ;
}
return true ;
}
public List<Integer> getValue(ListNode head){
List<Integer> valueList = new ArrayList<Integer>() ;
if(head == null){
return valueList ;
}
ListNode temp = head ;
while(true){
if(temp == null){
break ;
}
valueList.add(temp.val) ;
temp =temp.next ;
}
return valueList ;
}
}