223. 回文链表
描述
设计一种方式检查一个链表是否为回文链表。
样例 1:
输入:
1->2->1
输出:
true
样例 2:
输入:
2->2->1
输出:
false
挑战
O(n)的时间和O(1)的额外空间。
文章目录
题解
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: A ListNode.
* @return: A boolean.
*/
public boolean isPalindrome(ListNode head) {
// write your code here
if (head == null
|| head.next == null) {
return true;
}
// 利用快慢指针找到中位
ListNode fast = head;
ListNode slow = head;
while (fast.next != null
&& fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
// 反转后半部分
ListNode mid = this.reverse(slow.next);
// 进行比较
while (mid != null) {
if (mid.val != head.val) {
return false;
}
mid = mid.next;
head = head.next;
}
return true;
}
private ListNode reverse(ListNode h) {
if (h == null) {
return null;
}
ListNode pre = null;
ListNode curr = h;
while (curr != null) {
ListNode temp = curr.next;
curr.next = pre;
pre = curr;
curr = temp;
}
return pre;
}
}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由二当家的白帽子博客原创,转载请注明来源,谢谢~