코딩테스트

234. Palindrome Linked List

nayoon 2024. 2. 16. 22:04

https://leetcode.com/problems/palindrome-linked-list/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

palindrome에 대해서 잘 몰라서 풀이 방식에 대해 찾아보았다.

1. 절반으로 나눠서 비교하는 방법

2. 뒤집은 다음에 같은지 확인하는 방법

 

1번으로 푼 코드

8ms

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> list = new ArrayList<>();
        
        // 멋지다.. 똑똑한 외국녀석들..
        for(ListNode n = head; n != null; n = n.next) {
            list.add(n.val);
        }

        int mid = list.size() / 2;
        for(int i = 0; i < mid; i++) {
            if (list.get(i) != list.get(list.size() - 1 - i)) {
                return false;
            }
        }
        return true;
    }
}

 

 

2번으로 푼 코드

정말 느린 풀이..(30ms)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public static List<Integer> stack;
    public boolean isPalindrome(ListNode head) {
        
        stack = new ArrayList<>();
        check(head);
        
        return checkPalindrome();
    }

    public boolean checkPalindrome() {
        List<Integer> reversedStack = new ArrayList<>(stack);
        Collections.reverse(reversedStack);

        for(int i = 0; i < stack.size(); i++) {
            if (stack.get(i) != reversedStack.get(i)) {
                return false;
            }
        }

        return true;
    }

    public void check(ListNode node) {
        if (node == null) {
            return;
        }

        stack.add(node.val);
        check(node.next);
    }
}

'코딩테스트' 카테고리의 다른 글

409. Longest Palindrome  (0) 2024.02.17
9. Palindrome Number  (0) 2024.02.16
14. Longest Common Prefix  (0) 2024.02.14
844. Backspace String Compare  (0) 2024.02.12
13. Roman to Integer  (0) 2024.02.08