[LeetCode-面试02.06]回文链表

一.题目:

编写一个函数,检查输入的链表是否是回文的。

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

二.题解:

1.第一种解法:

(1)解题思路:
  • 首先生成新的反转head的链表newHead
  • 然后判断两个链表是否相等即可
  • 若相等则是回文链表,否则不是
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head){
ListNode newHead =reverseAndClone(head);
return isEquals(head,newHead);
}
public ListNode reverseAndClone(ListNode node){
ListNode head = null;

// n n
//node:1->2->3->4 head:1<-2<-3<-4
while(node!=null){
ListNode n = new ListNode(node.val); //复制
n.next=head;
head=n;

node=node.next;
}
return head;
}
public boolean isEquals(ListNode l1,ListNode l2){

while(l1!=null&&l2!=null){
if(l1.val!=l2.val){
return false;
}
l1=l1.next;
l2=l2.next;
}

return l1==null&&l2==null;
}

}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2021 Movle
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信