现给定一个链表ListNode* pHead,定义bool代表链表是否为回文,请编写程序。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
public class Palindrome { public boolean isPalindrome(ListNode pHead) { if (pHead == null || pHead.next == null) return false; ListNode currentNode = pHead; Stack<Integer> stack = new Stack<Integer>(); while (currentNode != null) { stack.push(currentNode.val); currentNode = currentNode.next; } while (pHead != null) { if (stack.pop() != pHead.val) { return false; } pHead = pHead.next; } return true; } }
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Palindrome { public boolean isPalindrome(ListNode pHead) { // write code here if(pHead == null || pHead.next == null){ return true; } List<Integer> list = new ArrayList<>(); ListNode p = pHead; //遍历链表,将结点值存入 list while(p != null){ list.add(p.val); p = p.next; } int i = 0,j = list.size() - 1; //从两头开始遍历比较元素值,不相等则返回false while(i <= j){ if(list.get(i) != list.get(j)){ return false; } i++; j--; } return true; } }
public class Palindrome { public boolean isPalindrome(ListNode pHead) { if(pHead == null) return false; ListNode p = pHead; ArrayList<Integer> list = new ArrayList<>(); while(p != null){ list.add(p.val); p = p.next; } for(int i = 0, j = list.size() - 1; i < j ;i++, j--){ if(list.get(i) != list.get(j)) return false; } return true; } }
public boolean isPalindrome(ListNode pHead) { ListNode mid = pHead; ListNode fast = pHead; if(pHead==null||pHead.next==null){ return true; } /* mid 为中间位置的节点 如果链表长度为偶数,指前半部分的最后一个 如果链表长度为奇数,指向正中间的一个 这样操作mid之后的链表就可以了 */ while(fast.next!=null){ fast=fast.next; if(fast.next!=null){ fast = fast.next; mid=mid.next; } } ListNode afertReserveHead = reserve(mid); //反转后半部分链表 ListNode frontNode=pHead; ListNode endNode=afertReserveHead; do{ if(frontNode.val!=endNode.val) { return false; } frontNode=frontNode.next; endNode=endNode.next; }while(frontNode!=mid); return true; } /** * @desc: 反转链表从pHead开始,pHead的next不发生改变(这里pHead的next无影响) * @date: 2018/9/10 16:06 * @param: * @return: 反转之后链表的表头 */ public ListNode reserve(ListNode pHead){ if(pHead==null||pHead.next==null){ return pHead; } ListNode preNode = pHead; ListNode currNode=preNode.next; while(currNode!=null){ ListNode nextNode=currNode.next; currNode.next=preNode; preNode=currNode; currNode=nextNode; } return preNode; }
//钻系统的漏洞
public class Palindrome {
public boolean isPalindrome(ListNode pHead) {
StringBuilder sb=new StringBuilder();
while(pHead.next!=null) {
sb.append(pHead.val);
pHead=pHead.next;
}
sb.append(pHead.val);
String s1=sb.toString();
String s2=sb.reverse().toString();
if(s1.equals(s2))
return true;
return false;
}
}
// java版快慢指针定中,辅助栈空间 public boolean isPalindrome(ListNode pHead) { if (pHead==null) return false; if (pHead.next==null) return true; ListNode slower = pHead; ListNode faster = pHead; Stack<ListNode> stack = new Stack<>(); boolean isOdd=true; while (faster!=null&&faster.next!=null){ stack.push( slower ); slower = slower.next; faster = faster.next.next; if(faster==null){ isOdd = false; } } // 奇数个结点,slower还要next一下 if(isOdd) slower = slower.next; while (!stack.empty()){ if (stack.pop().val!=slower.val){ return false; }else{ slower = slower.next; } } return true; }
package com.xiroy.test; import java.util.Stack; public class NameList { public boolean isPalindrome(ListNode pHead) { //定义一个泛型为Integer的栈 //遍历链表,将结点里的数据取出来放到栈里 //遍历链表,将取出来的值跟栈顶的值一个个比较 Stack<Integer> stack = new Stack<Integer>(); ListNode current = pHead; while(current!=null){ stack.push(current.val); current = current.next; } while(pHead!=null){ int top = stack.pop().intValue(); if(top!=pHead.val){ return false; } pHead = pHead.next; } return true; } } class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }
//借用ArrayList public boolean isPalindrome(ListNode pHead) { if(pHead==null) return false; ArrayList<Integer> nodeList=new ArrayList<Integer>(); while(pHead!=null){ nodeList.add(pHead.val); pHead=pHead.next; } for(int i=0;i<nodeList.size()>>1;i++) if(nodeList.get(i)!=nodeList.get(nodeList.size()-1-i)) return false; return true; }
public class Palindrome {
public boolean isPalindrome(ListNode pHead) {
// write code here
StringBuffer sb1 = new StringBuffer();
while(pHead != null) {
sb1.append(pHead.val);
pHead = pHead.next;
}
String str1 = sb1.toString();
String str2 = sb1.reverse().toString();
if(str1.equals(str2)) {
return true;
}
return false;
}
}
不知道这个是不是简单易懂
public class Palindrome { public boolean isPalindrome(ListNode pHead) { ListNode p=pHead; Stack<ListNode> ss=new Stack<ListNode>(); while(p!=null){ ss.push(p); p=p.next; } p=pHead; while(p!=null){ if(ss.pop().val!=p.val){ return false; } p=p.next; } return true; } }
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Palindrome { public boolean isPalindrome(ListNode pHead) { if (pHead == null) return false; if (pHead.next == null) return true; ArrayList<Integer> list = new ArrayList<>(); while (pHead != null) { list.add(pHead.val); pHead = pHead.next; } boolean notEqueal = false; for (int i = 0; i < list.size(); i ++) { if (list.get(i) != list.get(list.size() - 1 - i)) { notEqueal = true; } } return !notEqueal; } }
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Palindrome { public boolean isPalindrome(ListNode pHead) { // write code here String str = ""; String str2 = ""; while(pHead!=null){ str = str+String.valueOf(pHead.val); str2 = String.valueOf(pHead.val)+str2; pHead = pHead.next; } if(str.equals(str2)){ return true; }else{ return false; } } }
public class Palindrome { public boolean isPalindrome(ListNode pHead) { // write code here if(pHead==null) return true; Stack<ListNode> stack = new Stack<>(); ListNode p = pHead; int length=0,index=1; while(p!=null){ stack.push(p); p=p.next; length++; } p = pHead; while(p!=null && index<=length/2){ if(p.val!=stack.pop().val) return false; p = p.next; index++; } return true; } }
public class Palindrome { public boolean isPalindrome(ListNode pHead) { // write code here if(pHead==null) return false; ArrayList<Integer> rm=new ArrayList<Integer>(); while(pHead!=null) { rm.add(pHead.val); pHead=pHead.next; } int l=rm.size()-1; int f=0; while(true) { if(l==f||l-f==1) return true; if(rm.get(f)!=rm.get(l)) return false; if(rm.get(f)==rm.get(l)) { l--; f++; } } } }