什么是回文结构,很好理解,例如这里有一句话“上海自来水来自海上”,从前读或者从后读,它都是一样的,这就是回文结构
题目网址:https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?
例如有这么一个链表
1->2->2->1
那么它就是回文结构,返回true
这道题的大致思路如下:找到该链表的中间结点,将该中间结点的后半部分进行逆置,然后比较前半部分和后半部分的链表是否相同,如果相同则返回true
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class PalindromeList {
public boolean chkPalindrome(ListNode A) {
// write code here
if(A == null || A.next == null){
//只有一个结点或链表为空的情况下
return true;
}
int len = size(A);
int steps = len / 2;
ListNode B = A;
for(int i =0;i < steps; i++){
B = B.next;
//B为中间结点
}
ListNode cur = B;
ListNode prev = null;
while(cur != null){
//将B进行逆置
ListNode next = cur.next;
if(next == null){
B = cur;
}
cur.next = prev;
prev = cur;
cur = next;
}
while(B != null){
//遍历B,并且比较A,这里由于奇偶关系,我们遍历B
if(A.val != B.val){
return false;
}
A = A.next;
B = B.next;
}
return true;
}
public int size(ListNode cur){
int size = 0;
for(;cur != null ; cur = cur.next){
size++;
}
return size;
}
}