234回文链表
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(); } }