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();
    }
}

 

posted @ 2022-07-13 22:04  心动如雷  阅读(26)  评论(0编辑  收藏  举报