下午好啊,最近似乎陷入了懈怠期,学习提不上劲。循环了一天的《偏爱》,看了四五集仙剑,做题吧,晚上吃完晚饭回来稍微学一下。放个听歌记录图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bc410bbd6ab8495a8f6ddef0cf792d4f.png)
1、题目描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ca4d92b932624cb9a94a6fea3b1b3421.png)
2、逻辑分析
回文链表让我想到了回文数字,唯一不同的是这里的数据结构是链表。官方给出了三种解法:将值复制到数组中后用双指针法、递归以及快慢指针。我们先来看看第一种将值复制到数组中后用双指针法:一共为两个步骤:
- 复制链表值到数组列表中。
- 使用双指针法判断是否为回文。
代码演示
public boolean isPalindrome(ListNode head) {
List<Integer> nums = new ArrayList<Integer>();
ListNode cur = head;
while(cur != null){
nums.add(cur.val);
cur = cur.next;
}
int left = 0;
int right = nums.size() - 1;
while(left < right){
if(!nums.get(left).equals(nums.get(right))){
return false;
}
left++;
right--;
}
return true;
}
思路很简单,注释很详细,不过赘述。时间复杂度:O(n),空间复杂度:O(n)。
接下来我们再看看第三个方法:快慢指针。算球了,我看了看第三种方法,发现过于繁琐,在这里打个TODO,下次做的时候再看吧。该吃饭了,BYE!