234. 回文链表

Posted xiyangchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了234. 回文链表相关的知识,希望对你有一定的参考价值。

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

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true
 1 import java.util.ArrayList;
 2 
 3 public class PalindromeLinkedList 
 4     static class ListNode 
 5         int val;
 6         ListNode next;
 7         ListNode(int x) 
 8             val = x;
 9         
10     
11     
12     //方法一:遍历链表,将数据存储在集合中,然后将集合的头尾进行遍历
13     public boolean isPalindrome(ListNode head) 
14         ListNode current = head;
15         ArrayList<Integer> arr = new ArrayList<>();
16         while(current != null) 
17             arr.add(current.val);
18             current = current.next;
19         
20         int len = arr.size();
21         int first = 0;
22         int last = len-1;
23         while(first<last) 
24             if(!arr.get(first).equals(arr.get(last))) 
25                 return false;
26             
27             first++;
28             last--;
29         
30         return true;
31     
32     
33     //方法二:快慢指针查找链表的中点,将链表切断为两部分,对后一半的链表进行反转,再与前一半的链表进行比较
34     public boolean isPalindrome2(ListNode head) 
35         if(head == null || head.next == null) 
36             return true;
37         
38         ListNode slow = head;
39         ListNode fast = head;
40         //利用快慢指针查找中间节点,一个移动1个节点,另一个移动两个节点,当快指针移动到末尾时,慢指针移动到中间
41         while(fast != null && fast.next != null) 
42             slow = slow.next;  //当fast为null时,节点数为偶数,slow为中间偏右
43             fast = fast.next.next;  //当fast不为null时,节点数为奇数,slow为正中间
44         
45         cutLinkedList(head, slow);
46         ListNode backHalf = reverse(slow);
47         while(head != null && backHalf != null) 
48             if(head.val != backHalf.val) 
49                 return false;
50             
51             head = head.next;
52             backHalf = backHalf.next;
53         
54         return true;
55     
56     public static void cutLinkedList(ListNode head, ListNode cutNode) 
57         while(head.next != cutNode) 
58             head = head.next;
59         
60         head.next = null;
61     
62     public static ListNode reverse(ListNode head) 
63         ListNode newHead = null;
64         while(head != null) 
65             ListNode next = head.next; 
66             head.next = newHead;
67             newHead = head;
68             head = next;
69         
70         return newHead;
71     
72 

 

以上是关于234. 回文链表的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 234. 回文链表(进阶)

234. Palindrome Linked ListEasy判断链表是否回文

234. 回文链表

234. 回文链表

LeetCode 234——回文链表

leetcode 234 回文链表