版权声明:wangchong https://blog.csdn.net/wfcn_zyq/article/details/88089906
题目描述
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例
1->2->2->1
返回:true
时间限制:3秒
空间限制:32768K
思路
将链表压入栈中,出栈的同时和从头遍历链表与之比较,过程中出现不相等的情况则返回false
若一直出完栈都相等则返回true
解法
public class PalindromeList {
public boolean chkPalindrome(ListNode head) {
// write code here
Stack<ListNode> stack = new Stack<ListNode>();
ListNode cur = head;
while (cur != null) {
stack.push(cur);
cur = cur.next;
}
while (head != null) {
if (head.val != stack.pop().val) {
return false;
}
head = head.next;
}
return true;
}
}
程序最后
不要直接复制过去,要看懂,直接复制过去也不会通过
欢迎加我QQ:1939765238 一起讨论算法