回文链表
Posted wuyouwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文链表相关的知识,希望对你有一定的参考价值。
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
public static boolean isPalindrome(ListNode head){ ListNode fast=head; ListNode slow=head; while (fast!=null&&fast.next!=null){ slow=slow.next; fast=fast.next.next; } ListNode slowHead=slow; ListNode reverse=reverse(slow); ListNode h=head; while (h!=slowHead){ if(h.val!=reverse.val){ return false; } h=h.next; reverse=reverse.next; } return true; }
static ListNode reverse(ListNode head){ ListNode curr=head; ListNode pre=null; while (curr!=null){ ListNode temp=curr.next; curr.next=pre; pre=curr; curr=temp; } return pre; }
@Data static class ListNode{ private int val; private ListNode next; public ListNode(int value){ this.val=value; } }
主要思路是
1.先通过快慢指针(慢指针一次走一步,快指针一次走2步),找到后半段链表。
2.把后半段链表反转。
3.对比前半段链表和后半段链表是否一样,不一样返回false。
以上是关于回文链表的主要内容,如果未能解决你的问题,请参考以下文章