Leetcode Java 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) {
if (head != null) {
ListNode odd = head;
ListNode even = head.next;
ListNode temp = head.next;
while (even != null && even.next != null) {
odd.next = even.next;
even.next = even.next.next;
odd = odd.next;
even = even.next;
}
odd.next = temp;
}
return head;
}
}
결과
설명
- 주어진 ListNode인 head를 이용하여 짝수번째 값들을 head의 뒤로 이동시키는 문제이다.
- 반드시 O(1)의 추가 공간 복잡도와 O(n)의 시간 복잡도로 문제를 풀어야 한다.
-
head가 null이 아닌 경우만 3 ~ 5번을 수행한다.
- 문제 풀이에 필요한 변수를 정의한다.
- odd는 홀수번째 값을 ListNode로 저장할 변수로, head로 초기화한다.
- even은 짝수번쨰 값을 ListNode로 저장할 변수로, head.next로 초기화한다.
- temp는 even을 이용하여 뒤로 미룰 값들을 ListNode로 저장할 변수로, even과 동일하게 head.next로 초기화한다.
- even과 even.next ListNode들이 null이 아닌 경우, 아래를 수행한다.
- odd.next에 evne.next를 넣어준다.
- even.next에 even.next.next를 넣어준다.
- odd에 odd.next를 넣어준다.
- even에 evne.next를 넣어준다.
-
odd.next에 temp를 넣어 짝수번째 위치의 값들을 이어준다.
- 짝수번째 값들을 뒤로 이동시킨 head를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기