(LeetCode 234)Palindrome Linked List
java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料
保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。
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?
解法思想:
首先题目是说给定一个单链表,判断是否为回文的。要求为时间复杂度为O(n) ,空间复杂度为O(1) 。
解法思想为找到链表的中间节点,然后将后面的半部分反转过来,最后拆成两个链表,再比较。
代码部分如下所示:
public class Solution {
public boolean isPalindrome(ListNode head) {
//如果为空或者只有一个节点则判定为回文
if( head == null || head.next == null ){
return true;
}
//下面部分计算链表长度,并且将最后一个节点
//保存为链表2的头head2
int len = 1;
ListNode p = head,head2;
while( p.next != null ){
len++;
p = p.next;
}
head2 = p;
int i = 0;
p = head;
while( i != len/2 ){
p = p.next;
i++;
} //移动到链表中间节点
//从中间节点开始将其拆成链表2,并且反转
ListNode tail = p;
ListNode q = p.next;
while( q != null ){
ListNode r = q.next;
q.next = p;
p = q;
q = r;
}
tail.next = null;
//开始比较两段链表,判断是否为回文链表
ListNode m = head, n = head2;
while( m != null && n != null ){
if( m.val != n.val ){
return false;
}
m = m.next;
n = n.next;
}
return true;
}
}
leetcodelinkedlistjava
因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。
后续会有更多的精彩的内容分享给大家。
支付宝扫一扫
微信扫一扫
