Today I Learned

최지웅·2024년 3월 20일
0

Today I Learned

목록 보기
120/238

오늘 할일
1. LeetCode
2. 영상처리 과제
3. 카드발급
4. 리팩토링 마틴 파울러?
5. 소프트웨어 공학 과제발표시 가산점?

오늘 한일
1. LeetCode

    1. Odd Even Linked List는 홀수를 앞으로, 짝수를 뒤로 미는 것인 줄 알았으나 아니었다.
      짝수를 뒤로 미는 코드는 아래와 같다.
/**
 * 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 ListNode oddEvenList(ListNode head) {
        /*
            시간복잡도 O(n), 공간복잡도 O(1)로 홀수번째 node를 뒤로 link
         */
        if(head==null){
            return null;
        } else if(head.next==null){
            return head;
        }

        ListNode tail;
        int size=2;
        for(tail=head.next; tail.next!=null; tail=tail.next){size++;}
        System.out.println("size: "+size);

        ListNode tmp;
        while(head.val%2==0){//첫원소는 무조건 홀수
            tmp=head.next;
            head.next=null;
            tail.next=head;
            tail=tail.next;
            head=tmp;
        }

        int i=0;
        tmp=null;
        for(ListNode prev=head, node=head.next; node!=null&&i<size; i++){
            System.out.printf("prev: %d, node: %d, node.next: %d\n", prev.val, node.val, node.next.val);
            if(node.val%2==0){
                System.out.printf("Target detected. node: %d\n", node.val);
                prev.next=node.next;
                tail.next=node;
                tail=tail.next;//tail=node
                tail.next=null;
                node=prev.next;//node가 null로 변경
            } else{
                prev=node;
                node=node.next;
            }
            i++;
        }

        return head;
    }
}

예시를 다시 보니

짝수 인덱스에 있는 요소들을 뒤로 미는 것 같아보인다. 홀수만 앞으로, 짝수만 앞으로의 규칙성은 보이지 않는다.

profile
이제 3학년..

0개의 댓글