234. 回文链表(简单)
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list
思路:
用的是单链表,那么可以利用快慢指针实现,快指针走两步,慢指针走一步,当快指针走到末尾时,慢指针刚好会走到中间,用一个逆指针来逆置慢指针到达中间的每个位的next,便于后面进行判断前后是否一致。双链表的话这一步可以省略
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public boolean isPalindrome(ListNode head) { if(head==null || head.next==null) return true; ListNode fast=head,slow=head; ListNode prev=null,temp = head; while(fast!=null &&fast.next!=null){ fast = fast.next.next; temp = slow.next; slow.next = prev; prev = slow; slow = temp; } if(fast!=null) slow = slow.next; while(prev!=null && slow!=null){ if(prev.val!=slow.val){ return false; } slow = slow.next; prev = prev.next; } return true; } }
|