题目描述
给你一个单链表的头节点
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)