本文主要是介绍LeetCode 234 Palindrome Linked List (链表 快慢指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
题目分析:此题难度为easy,但要满足空间O(1),程序一次写对也是不容易的。思路是逆置后一半,中点用快慢指针的方式寻找,然后比较即可
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
public class Solution {public ListNode reverse(ListNode head) {if (head == null || head.next == null) {return head;}ListNode pre = head, cur = head.next;pre.next = null;while (cur != null) {ListNode tmp = cur.next;cur.next = pre;pre = cur;cur = tmp;}return pre;}public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) {return true;}if (head.next.next == null) {return head.val == head.next.val;}ListNode slow = head, fast = head;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}if (fast.next != null) {fast = reverse(slow.next);} else {fast = reverse(slow);}slow.next = null;slow = head;while (fast != null && slow != null) {if (slow.val != fast.val) {return false;}fast = fast.next;slow = slow.next;}return true;}
}
这篇关于LeetCode 234 Palindrome Linked List (链表 快慢指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!