LeetCode 234. 回文链表

绝地灬酷狼 2021-09-27 00:18 333阅读 0赞

请判断一个链表是否为回文链表。

示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true

解题思路:
1.快慢指针找到中点
2.将链表分为左右两个链表
3.将右边的链表逆序
4.对比左右链表是否相等(右边链表长度可能比左边链表少1 因此右边链表为空时结束循环)

  1. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
  2. class Solution {
  3. public boolean isPalindrome(ListNode head) {
  4. if(head==null||head.next==null)
  5. return true;
  6. ListNode p1 = head;
  7. ListNode p2 = head.next;
  8. while (p2!=null) {
  9. p2 = p2.next;
  10. if (p2 == null)
  11. break;
  12. p2 = p2.next;
  13. p1 = p1.next;
  14. }
  15. //奇数,则p1指向中点
  16. //偶数,则p1指向左边的最后一个节点
  17. p2 = p1.next;
  18. p1.next = null;
  19. //p2逆序
  20. ListNode newHead = null;
  21. while(p2!=null){
  22. ListNode p = p2.next;//保存链表的next
  23. p2.next = newHead;//将head的next指向新的链表头
  24. newHead = p2;//将新链表头指向头结点
  25. p2 = p;//将head赋给之前保存的next
  26. }
  27. //head 为左边链表 newhead为右边链表
  28. while (newHead!=null){
  29. if(head.val!=newHead.val)
  30. return false;
  31. head = head.next;
  32. newHead = newHead.next;
  33. }
  34. return true;
  35. }
  36. }

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读