回文结构
- 其实在我们生活中这种结构很常见,小学,中学都见过类似的找规律题,回文就是反转以后和以前一样的就是回文结构
回文链表
思路
反转之后还是与原链表一样,我们就称这种链表结构为回文结构
- 找链表的中间结点(快慢指针)
- 中间结点到尾结点进行反转
- head从前往后,slow从后往前
代码中还会有解释供大家更好地理解
public boolean isPail (ListNode head) {
// write code here
if(head==null)return false;
//定义快慢指针
//快的一次走两步,慢的一次走一步
//fast走到尾结点,slow所在的节点就是中间结点
ListNode fast=head;
ListNode slow=head;
//这里循环条件需要有两个
//一个是奇数情况
//一个是偶数情况
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
//反转
ListNode cur=slow.next;
while(cur!=null){
ListNode curNext=cur.next;
cur.next=slow;
slow=cur;
cur=curNext;
}
//循环条件控制前后相遇
while(head!=slow){
//判断节点值
if(head.val!=slow.val){
return false;
}
//偶数个节点情况
if(head.next==slow){
return true;
}
head=head.next;
slow=slow.next;
}
return true;
}
回文字符串
给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。
public boolean judge (String str) {
// write code here
//常规判空
if(str==null)return false;
//用toCharArray()将字符串转为字符数组
char[] arr=str.toCharArray();
int len=arr.length;
for(int i=0;i<len/2;i++){
//前后比较
if(arr[i]!=arr[len-1-i]){
return false;
}else{
return true;
}
}
return true;
}
加油喽!