题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/6/linked-list/45/
题目描述:
回文链表
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
//利用双指针快慢,找到中间位置。再利用栈的特点比较值
import java.util.Stack;
public class Solution {
public boolean isPalindrome(ListNode pHead) {
// write code here
ListNode fast = pHead;
ListNode slow = pHead;
Stack<Integer> sc = new Stack<Integer>();
while(fast!=null && fast.next!=null){
sc.push(slow.val);
slow = slow.next;
fast = fast.next.next;
}
if(fast != null){ //奇数点
slow = slow.next;
}
while(slow != null){
int top = sc.pop().intValue();
if(top != slow.val)
return false;
slow = slow.next;
}
return true;
}
}
//
class Solution {
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) {
return true;
}
if (head.next.next == null) {
return head.val == head.next.val;
}
ListNode fast = head.next;
ListNode slow = head;
while (fast.next != null) {
if (fast.next.val == slow.val) {
if (fast.next.next != null) {
return false;
}
fast.next = null;
slow = slow.next;
fast = slow.next;
if (fast == null || fast.val == slow.val) {
return true;
}
} else {
fast = fast.next;
}
}
return false;
}
}