【Java】编写函数,检查链表是否为回文

原创 2015年07月09日 15:38:02

快行指针找到链表中间结点

1. 反转前半部分看是否和后半部分一样

2. 将前半部分入栈,迭代访问剩下的一半结点,每次的栈顶元素一样则是回文链表


import java.util.Stack;
public class isHuiWen {
	public boolean isPalinddrome(LinkedListNode head) {
		LinkedListNode fast = head;
		LinkedListNode slow = head;
		
		Stack<Integer> stack = new Stack<Integer>();
		
		while( fast != null && fast.next != null ) {
			stack.push(slow.data);
			slow = slow.next;
			fast = fast.next.next;
		}
		
		//如果链表有奇数个元素,那么fast这时不为空,则比较后半段时跳过中间元素
		if ( fast != null ) {
			slow = slow.next;
		}
		
		while (slow != null) {
			int top = stack.pop().intValue();
			//如果不相同,则不是回文
			if (top != slow.data) {
				return false;
			}
			slow= slow.next;
		}
		return true;
	}
}


递归的解法:

class Result{
	public LinkedListNode node;
	public boolean result;
}

Result isPalindromeRecurse(LinkedListNode head, int length) {
	if (head == null || length == 0) {
		return new Result(null, true);
	}
	else if(length == 1) {
		return new Result(head.next,true);
	}
	else if(length == 2) {
		return new Result(head.next.next, head.data == head.next.data);
	}
	Result res = isPalindromeRecurse(head.next, length -2);
	if(!res.result || res.node == null){
		return res;
	}
	else{
		res.result = head.data == res.node.data;
		res.node = res.node.next;
		return res;
	}
}

boolean isPalinddrome(LinkedListNode head) {
	Result p = isPalindromeRecurse(head, listSize(head));
	return p.result;
}



LeetCode234_PalindromeLinkedList (判断是否为回文链表) Java题解

题目: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it...

双栈排序之程序员面试经典

题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。 给定一个int[] numbers(C++中为v...

《程序员面试金典》--二叉查找树的判断

/***************************************************************************************************...
  • zdplife
  • zdplife
  • 2015年10月24日 14:55
  • 825

9.2链表(七)——检查链表是否为回文

/**  * 功能:检查链表是否为回文  */ 三种方法: 1、反转链表,然后与原链表比较 //反转并比较 public static boolean i...

程序员面试金典: 9.2链表 2.7检查链表是否为回文

#include #include #include using namespace std; /* 问题:编写一个函数,检查链表是否为回文 分析:所谓回文,也就是对称。先找到中间位置处,然...

java 检查是否是回文

  • 2010年06月18日 17:09
  • 59KB
  • 下载

递归方法编程,检查是否是回文

  • 2012年05月30日 18:46
  • 825B
  • 下载

Palindrome Linked List 判断是否是回文链表

要求O ( n ) 的时间和固定的空间。 数组因为有index可以直接访问,判断是否回文是简单的,那么链表怎么访问到头,尾部呢? 我们的一个想法是:将链表翻转,要是翻转后的链表跟原链表的对应元素值都是...

leetcode系列(16)判断链表是否为回文

Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) tim...
  • macchan
  • macchan
  • 2015年07月12日 11:20
  • 423

判断是否是回文链表

package 链表下; public class palindromeLinkedList { /** * 获取链表长度 * @param head * @return */ ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写函数,检查链表是否为回文
举报原因:
原因补充:

(最多只允许输入30个字)