[알고리즘] Leetcode_328_Odd_Even_Linked_List

jeongjwon·2023년 3월 29일
0

알고리즘

목록 보기
15/48

Problem

Solve

  public ListNode oddEvenList(ListNode head) {
        if(head == null) return null;
        ListNode odd = head;//1 2 3 4 5
        ListNode even = head.next;// 2 3 4 5
        ListNode evenStart = even;
        ListNode result = odd;

        while(even != null && even.next != null){
            //1 2 3 4 5
           
            odd.next = odd.next.next; //3 4 5
            even.next= even.next.next;//4 5

            odd = odd.next; //1 3 4 5
            even = even.next;
        }
        odd.next = evenStart;

        return result;
    }  

먼저 odd와 even 을 먼저 할당해주고 while문에서 next.next 로 따로 노드들을 저장한다.
이전에도 의문이었던 while문 조건에서 odd!=null || odd.next!=null 이 아닌 이유는 even의 ㅜnext 를 나중에 지정해주기 때문에 아마도 even!=null || even.next!=null 해도 odd에 아무런 영향을 미치지 않기 때문인 것 같다. 전자는 먼저 할당을 해주기 때문에 even에게 영향을 미친다는 나의 생각이다.

그리고 각각 따로 odd와 even 노드를 설정해주고 evenStart와 result를 따로 또 할당해주는 이유는 odd와 even은 while문을 통해 이미 첫 노드에서 멀어진 후이기 때문에 진전되기 전의 초기의 노드들을 설정해주고 odd 후 even 을 접목시켜야 하기 때문에 odd.next = evenStart 로 붙여준다는 의미를 가진다.

0개의 댓글