题目描述:
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 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 boolean isPalindrome(ListNode head) {
//设置快慢指针 当快指针到达链表末尾时慢指针到达链表中点
ListNode slow=head;
ListNode fast=head;
Stack<Integer> stack=new Stack<Integer>();
//判空
if(head == null) return true;
//单节点链表
if(head.next == null) return true;
//注意:这里的结束判断主要看fast
while( fast.next!=null && fast.next.next!=null ){
fast=fast.next.next;
slow=slow.next;
}
while(slow.next!=null){ //后半部分压栈
slow=slow.next;
stack.push(slow.val);
}
while(!stack.isEmpty()){
if(stack.peek()==head.val){
stack.pop();
head=head.next;
}else{
return false;
}
}
return true;
}
}