题目描述
给你一个单链表的头节点
head
,请你判断该链表是否为回文链表
。如果是,返回true
;否则,返回false
。示例 1:
输入:head = [1,2,2,1] 输出:true示例 2:
输入:head = [1,2] 输出:false提示:
- 链表中节点数目在范围
[1, 105]
内0 <= Node.val <= 9
进阶:你能否用
O(n)
时间复杂度和O(1)
空间复杂度解决此题?
方法一
思路:
- 复制链表值到数组列表中。
- 使用双指针法判断是否为回文。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> vals= new ArrayList<Integer>();
//
ListNode currentNode=head;
while(currentNode!=null){
vals.add(currentNode.val);
currentNode=currentNode.next;
}
int front=0,back=vals.size()-1;
while(front<=back){
if(vals.get(front)!=vals.get(back)) return false;
front++;
back--;
}
return true;
}
}
参考链接:234. 回文链表 - 力扣(LeetCode)