回文链表空间复杂度O(1)解法
This commit is contained in:
parent
8000e4b1fa
commit
1f28fb2d4c
|
@ -1,5 +1,7 @@
|
|||
package com.cool.hot100.linkedlist;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class Num234 {
|
||||
|
||||
/**
|
||||
|
@ -12,22 +14,60 @@ public class Num234 {
|
|||
public ListNode node;
|
||||
|
||||
public boolean isPalindrome(ListNode head) {
|
||||
node = head;
|
||||
return reNodeCheck(head);
|
||||
}
|
||||
// node = head;
|
||||
// return reNodeCheck(head);
|
||||
//时间复杂度为O(n),空间复杂度为O(1)解法
|
||||
ListNode slowNode = head;
|
||||
ListNode fastNode = head;
|
||||
while (fastNode.next != null && fastNode.next.next != null) {
|
||||
fastNode = fastNode.next.next;
|
||||
slowNode = slowNode.next;
|
||||
}
|
||||
ListNode temp = head;
|
||||
ListNode reverse = reverse(slowNode.next);
|
||||
while (reverse != null) {
|
||||
if (reverse.val != temp.val) {
|
||||
return false;
|
||||
}
|
||||
temp = temp.next;
|
||||
reverse = reverse.next;
|
||||
|
||||
//递归反向对比
|
||||
public boolean reNodeCheck(ListNode node){
|
||||
if (node!=null){
|
||||
if(!reNodeCheck(node.next)){
|
||||
return false;
|
||||
}
|
||||
if(node.val!=this.node.val){
|
||||
return false;
|
||||
}
|
||||
this.node=this.node.next;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ListNode reverse(ListNode node) {
|
||||
ListNode pre = null;
|
||||
while (node != null) {
|
||||
ListNode next = node.next;
|
||||
node.next = pre;
|
||||
pre = node;
|
||||
node = next;
|
||||
}
|
||||
return pre;
|
||||
}
|
||||
|
||||
//递归反向对比
|
||||
public boolean reNodeCheck(ListNode node) {
|
||||
if (node != null) {
|
||||
if (!reNodeCheck(node.next)) {
|
||||
return false;
|
||||
}
|
||||
if (node.val != this.node.val) {
|
||||
return false;
|
||||
}
|
||||
this.node = this.node.next;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@Test
|
||||
public void test(){
|
||||
// ListNode node=new ListNode(5,null);
|
||||
ListNode node1=new ListNode(1,null);
|
||||
ListNode node2=new ListNode(2,node1);
|
||||
ListNode node3=new ListNode(2,node2);
|
||||
ListNode node4=new ListNode(1,node3);
|
||||
isPalindrome(node4);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue