给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 输入:head = [1,2,2,1] 输出:true
采用动态数组,判断数组对称就可以了(这解法空间复杂度o(n))
- package TOP21_30;
-
- import Util.ListNode;
-
- import java.util.ArrayList;
- import java.util.List;
-
- // 回文链表
- //给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 输入:head = [1,2,2,1]
- //输出:true
- public class Top22 {
- public static boolean isPalindrome(ListNode head) {
- List
list = new ArrayList<>(); - while (head != null) {
- list.add(head.val);
- head = head.next;
- }
-
- int length = list.size();
-
- int k = length / 2;
- for (int i = 0; i <= k; i++) {
- if (list.get(i) != list.get(length - 1 - i)) {
- return false;
- }
- }
- return true;
- }
-
- public static void main(String[] args) {
- int[] nums = {1,2,3,2,1};
- ListNode node = ListNode.setNodes(0,nums);
- ListNode.printListData(node);
-
- int[] nums2 = {1,0,0};
- System.out.println(isPalindrome(ListNode.setNodes(0,nums2)));
- }
- }
ListNode 类
- package Util;
-
- public class ListNode {
- public int val;
- public ListNode next;
-
- public ListNode() {
- }
-
- public ListNode(int val) {
- this.val = val;
- }
-
- public ListNode(int val, ListNode next) {
- this.val = val;
- this.next = next;
- }
-
- public static ListNode setNodes(int index,int[] nums){
- ListNode res = new ListNode();
- res.val = nums[index];
- if(index == nums.length-1){
- res.next = null;
- return res;
- }
- else{
- res.next = setNodes(index+1,nums);
- }
- return res;
- }
-
- public static void printListData(ListNode node){
- while (node!=null){
- System.out.println(node.val);
- node = node.next;
- }
- }
- }