回文链表:如1->2->3->2->1或1->2->2->1,注意1->2不是回文链表。
给定一个链表,若是回文链表,返回true,若不是回文链表,返回false。
思路分析:
①链表无法按照下标进行访问,故将链表复制到数组列表中;
②按照从前往后和从后往前分别遍历数组,遍历时数组值都相等,则为回文链表,如果有数组值不相等,则不是回文链表。
代码实现:
public boolean isPalindrome(ListNode head) {
//新建一个数组
List<Integer> list = new ArrayList<>();
//将链表复制到数组中
while(head != null){
list.add(head.val);
head = head.next;
}
//分别从前往后和从后往前遍历数组,判断是否是回文数组
int front = 0;
int back = list.size() - 1;
while(front < back){
//从前往后遍历和从后往前遍历时数组值不相等,不是回文链表
if(!list.get(front).equals(list.get(back))){
return false;
}
front++;
back--;
}
//遍历完,从前往后遍历和从后往前遍历时,数组值相同,时回文链表
return true;
}