回文链表空间复杂度O(1)解法
This commit is contained in:
parent
8000e4b1fa
commit
1f28fb2d4c
|
@ -1,5 +1,7 @@
|
||||||
package com.cool.hot100.linkedlist;
|
package com.cool.hot100.linkedlist;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
public class Num234 {
|
public class Num234 {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,22 +14,60 @@ public class Num234 {
|
||||||
public ListNode node;
|
public ListNode node;
|
||||||
|
|
||||||
public boolean isPalindrome(ListNode head) {
|
public boolean isPalindrome(ListNode head) {
|
||||||
node = head;
|
// node = head;
|
||||||
return reNodeCheck(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;
|
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