Palindrome Linked List - LeetCode 判断一个链表是否是回文结构
2017-03-04 21:10
567 查看
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?
Difficulty: Easy
思路:判断一个链表是否是回文结构
例如:1->2->3->2->1 是
1->2->3->1 否
方法一:将链表的值一次性全部压栈,然后弹出和原链表的值进行比对,如果全部相同,则是回文结构。
时间复杂度O(n) 使用了N个额外空间。
方法二:使用两个指针快指针和满指针,快指针一次走两步,并将慢指针压栈,当快指针走到最后结点时,慢指针正好到达链表的中间位置(如何找到链表中间位置的方法),此时,如果慢指针遍历的个数是基数,则不压栈。然后,慢指针继续移动并和栈中弹出的值对比。如果相同则是回文结构。
此方法相当于只使用的方法一一半的内存空间。故时间复杂度是O(k/2).
方法三:最优解:
找到中间点,然后将链表后半部分做逆序调整。从链表头尾向中间遍历对比。此方法不必申请额外的空间。时间复杂度O(n) .
Follow up:
Could you do it in O(n) time and O(1) space?
Difficulty: Easy
思路:判断一个链表是否是回文结构
例如:1->2->3->2->1 是
1->2->3->1 否
方法一:将链表的值一次性全部压栈,然后弹出和原链表的值进行比对,如果全部相同,则是回文结构。
时间复杂度O(n) 使用了N个额外空间。
方法二:使用两个指针快指针和满指针,快指针一次走两步,并将慢指针压栈,当快指针走到最后结点时,慢指针正好到达链表的中间位置(如何找到链表中间位置的方法),此时,如果慢指针遍历的个数是基数,则不压栈。然后,慢指针继续移动并和栈中弹出的值对比。如果相同则是回文结构。
此方法相当于只使用的方法一一半的内存空间。故时间复杂度是O(k/2).
方法三:最优解:
找到中间点,然后将链表后半部分做逆序调整。从链表头尾向中间遍历对比。此方法不必申请额外的空间。时间复杂度O(n) .
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public boolean isPalindrome(ListNode head) { if(head == null) { return true; } ListNode p1 = head; ListNode p2 = head; ListNode p3 = p1.next; ListNode p 4000 re = p1; //find mid pointer, and reverse head half part while(p2.next != null && p2.next.next != null) { p2 = p2.next.next; pre = p1; p1 = p3; p3 = p3.next; p1.next = pre; } //odd number of elements, need left move p1 one step if(p2.next == null) { p1 = p1.next; } else { //even number of elements, do nothing } //compare from mid to head/tail while(p3 != null) { if(p1.val != p3.val) { return false; } p1 = p1.next; p3 = p3.next; } return true; } }
相关文章推荐
- 如何判断一个单向链表是否为回文链表(Palindrome Linked List)
- LeetCode234_PalindromeLinkedList (判断是否为回文链表) Java题解
- [分析总结:leetcode-Palindrome Linked List] 给定单链表,判断链表是否为回文。
- 【Leetcode】234. Palindrome Linked List -判断链表是否为回文序列
- Palindrome Linked List 判断链表是否回文 栈实现
- LinkLists 检查一个链表是否为回文 Check if a linked list is palindrome @CareerCup
- Leetcode-234. Palindrome Linked List(判断链表是否回文)
- LeetCode 234. Palindrome Linked List判断链表是否回文
- [leetcode 141] Linked List Cycle----判断链表是否为循环链表
- leetcode--Linked List Cycle--判断链表是否有环
- Linked List Cycle-- 判断一个单向链表中是否有环存在
- LeetCode OJ:Palindrome Linked List(回文链表判断)
- LeetCode OJ 之 Palindrome Linked List(回文链表判断)
- 判断一个链表是否为回文结构
- LeetCode 234 Palindrome Linked List(回文链表)(*)(?)
- 判断一个链表是否为回文结构
- 234. Palindrome Linked List(判断链表是不是回文的)
- [LeetCode-141] Linked List Cycle(判断链表是否有环)
- leetcode234---Palindrome Linked List(回文链表)
- 链表之判断一个链表是否为回文结构(二)