题目描述
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 链接
测试样例
1->2->2->1
返回:true
解题思路
可以利用数据结构中的栈来进行判断
解决方案
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class PalindromeList {
public boolean chkPalindrome(ListNode A) {
Stack<Integer> stack = new Stack<Integer>();
ListNode cur = A;
while(cur != null){
if(!stack.isEmpty() && stack.peek() == cur.val){
stack.pop();
}else{
stack.push(cur.val);
}
cur = cur.next;
}
return stack.isEmpty();
}
}
测试样
import org.junit.; import static org.junit.Assert.;
public PalindromeListTest { @Test public void testOne() { ListNode A = new ListNode(1); ListNode B = new ListNode(2); ListNode C = new ListNode(2); ListNode D = new ListNode(1);
A.next = B;
B.next = C;
C.next = D;
assertEquals(true,
new PalindromeList().chkPalindrome(A));
}
}