您的位置:首页 > 编程语言 > Java开发

Palindrome Linked List

2015-07-12 14:38 351 查看

1 题目描述

Given a singly linked list, determine if it is a palindrome.

题目出处:https://leetcode.com/problems/palindrome-linked-list/

2 解题思路

题目类型为:单链表和双指针题目,这类题目主要是使用两个指针来确定一些关系。题目中还使用了栈进行辅助,用来进行下一趟比较。

3 源代码

package com.larry.easy;

import java.util.List;
import java.util.Stack;

import com.larry.util.ListNode;

public class PalindromeLinkedList {
public boolean isPalindrome(ListNode head) {
if(head == null) return true;
else if(head.next == null) return true;
else{//两个及以上元素
Stack<ListNode> stack = new Stack<ListNode>();
ListNode first = head;
ListNode second = head;
outer:
while(true){
for(int i = 0; i < 2; i++){//second走两步,first走一步
if(second == null) break outer;
else{
if(i == 0){//second走第一步
if(second.next != null){
second = second.next;
stack.add(first);
//odd = false;
}else break outer;
}else{//second走第二步
if(second.next != null){
second = second.next;
first = first.next;
//odd = true;
}else break outer;
}
}
}
}
while(!stack.isEmpty()){
first = first.next;
ListNode stackCur = stack.pop();
if(first.val != stackCur.val) return false;
}
}
return true;
}

public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(2);
ListNode node4 = new ListNode(1);
node1.next = node2;
node2.next = node3;
node3.next = node4;
ListNode node = node1;
PalindromeLinkedList pll = new PalindromeLinkedList();
System.out.println(pll.isPalindrome(node));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java leetcode