체인 테이블의 회문 여부를 판단하다
package ;
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Palindrome {
public boolean isPalindrome(ListNode pHead) {
// get middle node pointer
ListNode head = new ListNode(-1);
head.next = pHead;
ListNode rightStart = head;
ListNode p = head;
while (p != null) {
p = p.next;
if (p != null) {
p = p.next;
rightStart = rightStart.next;
}
}
rightStart = traverse(rightStart);
ListNode middle = rightStart;
ListNode leftStart = pHead;
//
while (true) {
if (leftStart != null) {
if (leftStart.val == rightStart.val) {
leftStart = leftStart.next;
rightStart = rightStart.next;
continue;
} else {
traverse(middle);
return false;
}
} else {
rightStart = traverse(middle);
print(pHead);
return true;
}
}
}
private ListNode traverse(ListNode head) {
if (head == null) {
return null;
}
ListNode pre = null, next = null;
while (true) {
if (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
} else {
break;
}
}
return pre;
}
private void print(ListNode root) {
if (root == null) {
return;
} else {
System.out.print(root.val + " ");
print(root.next);
}
}
public static void main(String[] args) {
ListNode pHead = new ListNode(1);
ListNode two = new ListNode(2);
ListNode three = new ListNode(3);
ListNode tmp = new ListNode(3);
three.next = tmp;
ListNode four = new ListNode(2);
ListNode five = new ListNode(1);
pHead.next = two;
two.next = three;
//three.next = four;
tmp.next = four;
four.next = five;
// ListNode six = new ListNode(6);
// five.next = six;
System.out.println(new Palindrome().isPalindrome(pHead));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
pandas 읽기 및 쓰기 Excelpandas 읽기와 쓰기 Excel은 중복된 데이터 가공 작업을 pandas에 맡기고 수동 노동을 절약하며 사용하기도 편리하지만 출력의 형식은 그다지 아름답지 않다.본고는 read_excel()과to_excel()의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.