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

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。