Skip to content

Commit a59ede7

Browse files
committed
Linkedlist를 이용하여 회문 출력
1 parent 6a27730 commit a59ede7

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

PalindromeLinkedLIst/ListNode.java

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
public class ListNode {
2+
int val;
3+
ListNode next;
4+
ListNode() {}
5+
ListNode(int val) { this.val = val; }
6+
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import java.util.Stack;
2+
3+
4+
// my solution
5+
public class PalindromeLinkedLIst {
6+
public static void main(String[] args) {
7+
ListNode list = new ListNode(1, new ListNode(0,new ListNode(1)));
8+
System.out.println(new PalindromeLinkedLIst().isPalindrome(list));
9+
}
10+
11+
public boolean isPalindrome(ListNode head) {
12+
Stack<Integer> stack = new Stack<>();
13+
ListNode head2 = head;
14+
int cnt = isCount(head2);
15+
16+
if (cnt == 1)
17+
return true;
18+
19+
for(int i = 0 ;head != null; i++){
20+
if(cnt % 2 == 1 && cnt/2 == i){
21+
head = head.next;
22+
continue;
23+
}
24+
25+
if (stack.isEmpty()) {
26+
stack.push(head.val);
27+
head = head.next;
28+
continue;
29+
}
30+
if (stack.peek() != head.val)
31+
stack.push(head.val);
32+
else
33+
stack.pop();
34+
35+
head = head.next;
36+
}
37+
38+
return stack.isEmpty();
39+
}
40+
41+
public int isCount(ListNode listNode){
42+
int cnt =0;
43+
while(listNode != null){
44+
cnt++;
45+
listNode = listNode.next;
46+
}
47+
return cnt;
48+
}
49+
}
50+
51+
/* best solution_USE REVERSE
52+
public boolean isPalindrome(ListNode head) {
53+
ListNode fast = head, slow = head;
54+
while (fast != null && fast.next != null) {
55+
fast = fast.next.next;
56+
slow = slow.next;
57+
}
58+
if (fast != null) { // odd nodes: let right half smaller
59+
slow = slow.next;
60+
}
61+
slow = reverse(slow);
62+
fast = head;
63+
64+
while (slow != null) {
65+
if (fast.val != slow.val) {
66+
return false;
67+
}
68+
fast = fast.next;
69+
slow = slow.next;
70+
}
71+
return true;
72+
}
73+
74+
public ListNode reverse(ListNode head) {
75+
ListNode prev = null;
76+
while (head != null) {
77+
ListNode next = head.next;
78+
head.next = prev;
79+
prev = head;
80+
head = next;
81+
}
82+
return prev;
83+
}
84+
*/

0 commit comments

Comments
 (0)