package i234;
import java.util.ArrayList;
import java.util.List;
import ds.link.ListNode;
/**
* @desc 回文链表
* @author wangymd
* @data 2022-07-13 21:10:41
*/
public class Solution {
public boolean isPalindrome(ListNode<Integer> listNode) {
if(listNode == null || listNode.size() % 2 != 0) {
return false;
}
List<Integer> list = new ArrayList<>();
int size = listNode.size();
int mid = size / 2 - 1;
ListNode<Integer> curNode = listNode;
for (int i = 0; i < size; i++) {
if(i <= mid) {
list.add(curNode.getVal());
}else {
if(list.get(size - 1 - i) != curNode.getVal()) {
return false;
}
}
curNode = curNode.getNext();
}
return true;
}
public static void main(String[] args) {
Solution solution = new Solution();
Integer[] arr = {1,2,2,1};
ListNode<Integer> listNode = new ListNode<Integer>(arr);
System.out.println("isPalindrome:" + solution.isPalindrome(listNode));//true
Integer[] arr2 = {1,2};
listNode = new ListNode<Integer>(arr2);
System.out.println("isPalindrome:" + solution.isPalindrome(listNode));//false
}
}
package ds.link;
/**
* @desc 没有虚拟头结点
* @author wangymd
* @data 2022-07-13 21:37:47
*/
public class ListNode<E> {
E val;
ListNode<E> next;
int size = 0;
public ListNode() {}
public ListNode(E val) {
this.val = val;
}
public ListNode(E[] array) {
ListNode<E> cur = this;
for (int i = 0; i < array.length; i++) {
if(i == 0) {
this.val = array[i];
}else {
ListNode<E> newNode = new ListNode<E>(array[i]);
cur.next = newNode;
cur = cur.next;
}
++size;
}
}
public E getVal() {
return val;
}
public ListNode<E> getNext() {
return next;
}
public int size() {
return size;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
ListNode<E> cur = this;
while (cur != null) {
stringBuilder.append(cur.val + "->");
cur = cur.next;
}
stringBuilder.append("null");
return stringBuilder.toString();
}
}