代码
测试用例
测试用例
测试结果
234. 回文链表
已解答
简单
相关标签
premium lock icon
相关企业
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例 1:
输入:head = [1,2,2,1]
输出:true
示例 2:
输入:head = [1,2]
输出:false
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> dataList = new ArrayList<Integer>();
ListNode p = head;
while (p != null) {
dataList.add(p.val);
p = p.next;
}
int left = 0;
int right = dataList.size() - 1;
while (left < right) {
if (!(dataList.get(left) == dataList.get(right))) {
return false;
}
left ++;
right --;
}
return true;
}
}
class Solution {
public boolean isPalindrome(ListNode head) {
// List<Integer> dataList = new ArrayList<Integer>();
// ListNode p = head;
// while (p != null) {
// dataList.add(p.val);
// p = p.next;
// }
// int left = 0;
// int right = dataList.size() - 1;
// while (left < right) {
// if (!(dataList.get(left) == dataList.get(right))) {
// return false;
// }
// left ++;
// right --;
// }
// return true;
ListNode firstHalfEnd = getEndOfFistHalfNode(head);
ListNode secondHalfStart = reverseList(firstHalfEnd.next);
// 判断是否回文
ListNode p1 = head;
ListNode p2 = secondHalfStart;
boolean result = true;
while (result && p2 != null) {
if (p1.val != p2.val) {
result = false;
}
p1 = p1.next;
p2 = p2.next;
}
// 还原链表
firstHalfEnd.next = reverseList(secondHalfStart);
return result;
}
public ListNode reverseList(ListNode head) {
ListNode ans = new ListNode();
while (head != null) {
ListNode p = head.next;
head.next = ans.next;
ans.next = head;
head = p;
}
return ans.next;
}
public ListNode getEndOfFistHalfNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}
浙公网安备 33010602011771号