请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
思路:用栈将链表中的值依次倒入,然后从栈顶到栈底依次放出,然后一个个匹配
代码如下:
package lianbiao;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class panduanhuiwen {
static class ListNode {
int val = 0;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static Stack<Integer> stack = new Stack<Integer>();
public static List<Integer> list = new ArrayList<Integer>();
public static void main(String[] args) {
ListNode l1 =new ListNode(1);
ListNode l2 =new ListNode(2);
ListNode l3 =new ListNode(3);
ListNode l4 =new ListNode(2);
ListNode l5 =new ListNode(1);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
boolean TF =panduanhuiwen.isPalindrome(l1);
System.out.println(TF);
}
public static boolean isPalindrome(ListNode pHead) {
if(pHead == null ) return false;
while(pHead != null){
stack.push(pHead.val);
list.add(pHead.val);
pHead = pHead.next;
}
for(int i=0;i<list.size();i++){
if(stack.pop() !=list.get(i)){
return false;
}
}
return true;
}
}