题目描述:

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?

解题思路:

使用O(n)的时间复杂度及O(1)的时间复杂度表明顺序遍历链表以及不能够开辟跟链表相当的空间,这样可以找出中间的位置,然后将后半部分的链表反转,然后跟前半部分的链表逐个位置比对。

代码如下:

/**
* 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) {
ListNode end = head;
ListNode mid = head;
while(end != null && end.next != null){
end = end.next.next;
mid = mid.next;
}
if(end != null) //in case of odd list
mid = mid.next;
mid = reverseList(mid);
while(mid != null){
if(mid.val != head.val)
return false;
mid = mid.next;
head = head.next;
}
return true;
} public ListNode reverseList(ListNode head){
ListNode pre = null, next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}

  

最新文章

  1. Qt中 QString 和int, char等的“相互”转换
  2. 传输层(3)-缓冲区大小及限制、TCP输出
  3. JavaScript Patterns 4.8 Function Properties - A Memoization Pattern
  4. Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
  5. 【FreeMaker】FreeMaker学习-基础
  6. NodeJS学习目录
  7. C "right-left" 从左到右
  8. Beta第六天
  9. PS 滤镜——平面坐标变换到极坐标
  10. 【转】H.264RTP封包原理
  11. java笔记----获取电脑上ip(内网ip)
  12. ES6中6种声明变量的方法
  13. Django restframe 视图函数以及ModelSerializer的使用
  14. Notepad++列编辑
  15. tensorflow win10 系统下安装
  16. [转]Linux的SOCKET编程详解
  17. html5<embed>的完整属性
  18. 深入分析Java Web技术内幕 修订版 pdf
  19. 一个最简单的使用Entity Framework 查询SQL 数据库的例子
  20. CentOS 7下安装Python3.6和pip

热门文章

  1. SQL语言笔记
  2. SCI杂志更名时,如何计算影响因子?
  3. css ul li 制作导航条
  4. time wait duo
  5. DataGrid行详细信息的绑定--DataGrid.RowDetailsTe(转载)
  6. hdu 2112 HDU Today (最短路,字符处理)
  7. POJ 2255 Tree Recovery(根据前序遍历和中序遍历,输出后序遍历)
  8. DBSCAN算法
  9. 一些linux的问题
  10. java基础知识回顾之---java String final类构造方法