标签:节点 int java 示例 ast null 解题思路 写法 空间
难度 easy
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
解题思路:这里的解题思路还是相对比较简单的,就是用快慢指针找到中间节点,然后把后半段倒置一下,最后是从起点和后半段的起点一起往后遍历,根据他们的值是否相等,然后进行判断。
代码 t76 s53 java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null || head.next==null) return true;
ListNode slow = head, fast = head;
while(fast.next!=null && fast.next.next!=null){
slow = slow.next;
fast = fast.next.next;
}
ListNode cur = slow.next;
slow.next = null;
while(cur!=null){
ListNode t = cur.next;
cur.next = slow.next;
slow.next = cur;
cur = t;
}
cur = slow.next;
while(cur!=null){
if(head.val!=cur.val) return false;
head = head.next;
cur = cur.next;
}
return true;
}
}
链表的翻转还是非常重要的,一定要记住写法。
参考资料:
标签:节点 int java 示例 ast null 解题思路 写法 空间
原文地址:https://www.cnblogs.com/zhengxch/p/14725333.html