给你一个单链表的头节点 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<Integer> 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;
}
}
}