234 Palindrome Linked List
2015-07-28 17:30
190 查看
题目链接:https://leetcode.com/problems/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?
解题思路:
1、遍历第一次链表,获取它的长度
2、遍历第二次链表,将它后半段链表就地逆转
3、遍历第三次链表,q指针指向链表头,p指针指向后半段已逆转的链表头,边比较值,边向后遍历
注意:
小心空指针异常
题目:
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?
解题思路:
1、遍历第一次链表,获取它的长度
2、遍历第二次链表,将它后半段链表就地逆转
3、遍历第三次链表,q指针指向链表头,p指针指向后半段已逆转的链表头,边比较值,边向后遍历
注意:
小心空指针异常
/** * 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 p = head; int n = 1; while(p.next != null) { p = p.next; n ++; } p = head; if(n % 2 == 0) { int k = n / 2; while(k != 1) { p = p.next; k --; } } else { int k = n / 2; while(k != 0) { p = p.next; k --; } } ListNode q = p.next; while(q != null && q.next != null) { ListNode temp = q.next; q.next = q.next.next; temp.next = p.next; p.next = temp; } q = head; while(p.next != null) { p = p.next; if(q.val != p.val) return false; q = q.next; } return true; } }
21 / 21 test cases passed. Status: Accepted Runtime: 472 ms
相关文章推荐
- 红黑树的理解说明(插入)
- 一个简单的python连接池,以及DBUtil.PooledDB的使用
- c3p0连接池
- iOS面试题--网络--如何处理多个网络请求的并发的情况
- Windows Message Queue(优先队列)
- Linux命令详解 -- date
- 差分约束系统
- 【Android】保存Fragment切换状态
- JDBC中Statement与PreparedStatement的区别
- java 微信支付所需MD5加密类
- [译]Python编写虚拟解释器
- map容器按value值排序
- Populating Next Right Pointers in Each Node
- Android的屏幕切换动画
- 黑马程序员--学习C语言结构体
- 【十】收获
- textview跑马灯和水平滚动条
- POJ2762 Going from u to v or from v to u?(强联通分量)
- AppStore 发布游戏分辨率列表。 From:https://itunesconnect.apple.com
- nyoj 苹果