判断一个链表是否为回文结构
来源:互联网 发布:过山车大亨 for mac 编辑:程序博客网 时间:2024/06/05 03:27
import java.util.Stack;//判断一个链表是否为回文结构public class HuiWenList{ //定义链表的节点 public static class Node{ int value; Node next; public Node(int data) { this.value=data; } } //解法1.数组存储判断一个链表是否为回文链表 public static boolean isHuiWenList(Node head) { if(head==null||head.next==null) { return true; } int leng=0; //记录链表的长度 Node p=head; while(p!=null) { ++leng; p=p.next; } int[]a=new int[leng]; //把链表的值存到数组中 for(int i=0;i<leng&&head!=null;i++) { a[i]=head.value; head=head.next; } for(int j=0;j<(leng)/2;j++) { if(a[j]!=a[leng-j-1]) { return false; } } return true; } //解法2.栈存储判断一个链表是否为回文链表 public static boolean isHuiWenList2(Node head){ if(head==null||head.next==null) { return true; } Stack<Node> stack=new Stack<Node>(); //将所有的节点压入一个栈 Node p=head; //指向头结点 while(p!=null) { stack.push(p); p=p.next; } while(head!=null) { if(head.value!=stack.pop().value) { return false; } head=head.next; } return true; } //解法3.栈存储(链表的一半)判断一个链表是否为回文链表 public static boolean isHuiWenList3(Node head){ if(head==null||head.next==null) { return true; } Stack <Integer> stack= new Stack<Integer>(); //存储链表节点的值(存储了链表节点数的一半) Node right=head.next; //指向头的下一个节点 Node cur=head; //指向头节点 //获得右半部分以right开头 while(cur.next!=null&&cur.next.next!=null) { right=right.next; cur=cur.next.next; } while(right!=null) { stack.push(right.value); //存储了链表节点数的一半 right=right.next; } while(!stack.isEmpty()) { if(head.value!=stack.pop()) { return false; } head=head.next; } return true; } //解法4.(全部反转链表法)判断一个链表是否为回文链表 public static boolean isHuiWenList4(Node head){ if(head==null||head.next==null) { return true; } Node t=Reverselist(head); while(head!=null&&t!=null) { if(head.value!=t.value) { return false; } head=head.next; t=t.next; } return true; } //(循环解法)翻转链表 public static Node Reverselist(Node head) { if(head==null) { return null; } Node p=head; //记录头节点 if(p.next!=null) //移动第二个节点 { p=p.next; }else { return head; } head.next=null; //头节点的下一个节点指向空 while(p!=null) { Node t=p.next; p.next=head; head=p; p=t; } return head; } //================================================ //解法5.(部分反转)判断一个链表是否为回文链表 public static boolean isHuiWenList5(Node head){ if(head==null||head.next==null) { return true; } Node n1=head; Node n2=head; //查找中间节点 while(n2.next!=null&&n2.next.next!=null) { n1=n1.next; n2=n2.next.next; } n2=n1.next; //n2->右半部分第一个节点 n1.next=null; Node n3=null; //右半部分反转 while(n2!=null) { n3=n2.next; //n3保存以一个节点 n2.next=n1; //下一个反转节点 n1=n2; //n1移动 n2=n3; //n2移动 } n3=n1; //保存最后一个节点 n2=head; //指向第一个节点 boolean res=true; //判断回文 while(n1!=null&&n2!=null) { if(n1.value!=n2.value) { res=false; break; } n1=n1.next; //从左到中部 n2=n2.next; //从右到中部 } //恢复链表 n1=n3.next; n3.next=null; while(n1!=null) { n2=n1.next; n1.next=n3; n3=n1; n1=n2; } return res; }public static void main(String[]args){ //System.out.println("Hello");Node node =new Node(1);node.next=new Node(2); node.next.next=new Node(2); node.next.next.next=new Node(3); System.out.println(isHuiWenList(node)); System.out.println(isHuiWenList2(node)); System.out.println(isHuiWenList3(node)); //System.out.println(isHuiWenList4(node)); System.out.println(isHuiWenList5(node));} }
阅读全文
0 0
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构(java实现)
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构
- 链表之判断一个链表是否为回文结构(一)
- 链表之判断一个链表是否为回文结构(二)
- 链表之判断一个链表是否为回文结构(三)
- 链表问题---判断一个链表是否为回文结构
- 链表问题——判断一个链表是否为回文结构
- 判断是否为回文结构
- java判断一个链表是否是回文结构
- 判断一个链表是否是回文结构 Python 版
- 判断一个数是否为回文素数
- 判断一个字符串是否为回文
- 判断一个数是否为回文数
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
- springboot集成Shiro,添加自定义filter后shiro的默认filter无法使用
- http协议学习-Cookie和Session
- 文章标题
- Neo4j 出现此提示(no changes ,no records)和解决方法
- 判断一个链表是否为回文结构
- MySQL创建联结
- 2017年山东省机器人比赛 双足竟步 arduino源代码(删去了关键步态程序 gongneng1 和 gongneng2)
- Java设计模式(一) 简单工厂模式不简单
- Eigen教程2-Dense
- Python 学习之路 001
- 中国打脸“三大国际信用评级霸权”硝烟再起
- 并发编程修十:阻塞队列
- 洛谷 3932 Chtholly!