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
로 붙여준다는 의미를 가진다.