判断回文链表
问题描述
请判断一个链表是否为回文链表
示例
输入: 1->2
输出: false
示例
输入: 1->2->2->1
输出: true
分析
利用栈来做,偶数情况下前半段入栈,后半段与弹栈元素做对比即可,下面代码可以正确运行,但我感觉设计得复杂了,有时间再来优化一下
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public static boolean isPalindrome(ListNode head) {
if (head == null) return true;
Stack stack = new Stack(); //定义栈结构
int len = computeLen(head); //head = compute(head)? ;
int count = 0; //辅助计数器
/*遍历链表,进栈进一半*/
while (head.next != null) {
++count;
if (count > len / 2) break; //进一半
stack.push(head);
head = head.next;
}
/*判断是否回文*/
/*链表长度为偶数*/
if (len % 2 == 0) {
for (int k = 0; k < len / 2; k++) {
ListNode listNode = (ListNode) stack.pop();
int i = listNode.val;
if (i != head.val) {
return false;
} else {
head = head.next;
}
}
return true;
}else {
for (int k = 0; k < len / 2; k++) {
ListNode listNode