题目链接
https://leetcode-cn.com/problems/palindrome-linked-list/
描述
请判断一个链表是否为回文链表。
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
示例
示例 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) {
}
}
代码
一边遍历,一遍反转前一半的链表,如果需要还原链表的话,只要重新翻准一下即可。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if (head == null) {
return true;
}
ListNode slow = head;
ListNode fast = head;
ListNode node = null;
while (fast != null && fast.next != null) {
fast = fast.next.next;
ListNode slowNext = slow.next;
slow.next = node;
node = slow;
slow = slowNext;
}
//节点数目是奇数
if (fast != null) {
slow = slow.next;
}
while (slow != null) {
if (slow.val != node.val) {
return false;
}
slow = slow.next;
node = node.next;
}
return true;
}
}
这篇博客探讨了如何在O(n)时间复杂度和O(1)空间复杂度下,通过反转链表的一半来判断链表是否为回文。文章提供了详细的示例代码,包括初始化链表节点、定义解决方案函数以及实现反转链表的技巧。在示例中,作者展示了如何处理奇数长度链表的情况,并通过比较反转后的前半部分链表与原始后半部分链表的值来确定回文状态。
752

被折叠的 条评论
为什么被折叠?



