class Solution { public boolean isPalindrome(ListNode head) { // 快慢指针找中点 ListNode slow = head; ListNode fast = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } // 反转后半部分 ListNode pre = null; while (slow != null) { ListNode next = slow.next; slow.next = pre; pre = slow; slow = next; } // 前后两段比较是否一致 ListNode node = head; while (pre != null) { if (pre.val != node.val) { return false; } pre = pre.next; node = node.next; } return true; }这段代码的时间复杂度和空间复杂度
时间: 2023-12-30 22:01:59 浏览: 67
【leetcode-链表】环形链表
这段代码的时间复杂度为O(n),其中n为链表的长度。快慢指针找中点和反转后半部分都需要遍历一遍链表,时间复杂度均为O(n/2),前后两段比较也需要遍历一遍链表,时间复杂度为O(n/2)。因此,总的时间复杂度为O(n/2) + O(n/2) + O(n) = O(n)。
空间复杂度为O(1),因为只使用了常数级别的额外空间,不随链表长度n的增加而增加。
阅读全文