解题思路:
1. 先将链表一分为二,再遍历两个链表来比较字符串
2. 如何将链表一分为二?通过快慢指针的方式,将链表一分为二
3. 将后半段链表反转,再依次比较即可
// 判断是否为回文字符串
public boolean isHuiwen(){
Node dummy = findMid();
dummy = reverse(dummy);
while(dummy != null){
if(dummy.data != head.data){
return false;
}
dummy = dummy.next;
head = head.next;
}
return true;
}
// 查找链表的中间节点
public Node findMid(){
Node fast = head;
Node slow = head;
while(fast.next != null && fast.next.next != null){
fast = fast.next.next;
slow = slow.next;
}
if(fast.next == null){
return slow.next;
}else{
return slow.next;
}
}
// 反转链表
public Node reverse(Node head){
Node dummy = null;
while(head != null){
Node p = head.next;
head.next = dummy;
dummy = head;
head = p;
}
return dummy;
}