剑指 Offer II 027. 回文链表
给定一个链表的 头节点 head ,请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
输入: head = [1,2,3,3,2,1]
输出: true
将链表中的值复制到数组列表后再用双指针法进行判断。
新建一个数组列表存储节点的值,List num = new ArrayList();
复制时,依次将节点值复制进集合中,num.add(cur.val),同时节点还要后移cur=cur.next;
直至当cur为null时复制完成。
双指针left和right,比较数组列表中对应位置元素是否一致,并且left和right每次做相应变化,left++,right–
循环条件是left<right,结束条件是当有不一致的元素时,直接返回false。
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> num = new ArrayList<Integer>();
ListNode cur = head;
while(cur!=null){
num.add(cur.val);
cur=cur.next;
}
int left=0;
int right = num.size()-1;
while(left<right){
if(!num.get(left).equals(num.get(right))){
return false;
}
left++;
right--;
}
return true;
}
}
看了官方题解,另一解法就是利用递归,由于递归是按相反的顺序进行处理,所以利用这一点可以进行节点是否相等的判断,但是还没完全看懂代码,先放官方题解到下面。