LeetCode—面试题:回文链表(反转链表+比较)

    科技2026-04-21  3

    回文链表(简单)

    2020年10月8日

    题目来源:力扣

    解题 如果是回文,那么前半部分链表反转后的链表应该与后半部分的链表完全一致

    反转链表+比较 反转链表方法可看这里,首先算出链表长度,然后取一半进行反转,反转后需要判断长度的奇偶,奇数则省略中间一个数,偶数照常计算,前后两链表遍历对比,不同则返回false /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public boolean isPalindrome(ListNode head) { if(head==null) return true; ListNode tmp=head; int len=0; //算出链表长度 while(tmp!=null){ len++; tmp=tmp.next; } if(len==1) return true; if(len==2) return head.val==head.next.val; ListNode pre=head; ListNode cur=head.next; ListNode cur_t=head.next.next; pre.next=null; for(int i=1;i<len/2;i++){ cur.next=pre; pre=cur; cur=cur_t; cur_t=cur_t.next; } //如果是奇数,后面的链表需要往后一步 if(len%2==1) cur=cur_t; while(pre!=null && cur!=null){ if(pre.val!=cur.val) return false; pre=pre.next; cur=cur.next; } return true; } }

    Processed: 0.009, SQL: 9