오늘 할일
1. 영상처리 코드 결과하면 첨부하여 재제출
2. LeetCode
3. DevOps공부 계획 수립 및 세모봉 검토
4. 주유할인카드 발급
5. 토익?
오늘 한일
1. LeetCode
/**
* 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
*/
//1. 예외처리(head가 비어있거나 하나일 경우)
if (head == null) {
return null;
} else if (head.next == null) {
return head;
}
//2. 전체 size 계산
int size = 1;
for (ListNode i = head; i.next != null; i = i.next) {
size++;
}
ListNode head2 = null, iter2 = null, iter = head, prev = head;
for (int i = 0; i < size; i++) {
if (i == 5)
System.out.println();
if (i == 0) {
iter = iter.next;
} else if (i == 1) {
if(iter.next!=null) {
head2 = new ListNode(iter.val);
iter2 = head2;
iter = iter.next;
prev.next = iter;
} else{
break;
}
} else if (i == size - 1) {//merge
if (i % 2 == 1) {
iter2.next = new ListNode(iter.val);
iter2=iter2.next;
prev.next=head2;
} else {
iter.next = head2;
}
} else if (i % 2 == 0) {
prev = iter;
iter = iter.next;
} else if (i % 2 == 1) {
iter2.next = new ListNode(iter.val);
iter2 = iter2.next;
iter = iter.next;
prev.next = iter;
}//공통코드는 없다.
}//endfor
return head;
}
}
많은 사람들이 쉽게 푼 코드는 무엇일까 하고 확인해보니
public class Solution {
public ListNode oddEvenList(ListNode head) {
if(head==null || head.next==null || head.next.next==null){
return head;
}
ListNode oddHead = head;
ListNode evenHead = head.next;
ListNode odd = oddHead;
ListNode even = evenHead;
while (even!=null && even.next!=null) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
}
로 굉장히 간단했다. 순회하는 iter을 두개 만들어 홀수는 홀수들만, 짝수는 짝수들만 연결시키고 그 head들을 연결시켰다.
최대한 간단하게 풀려는 시도를 많이 노력해야겠다는 생각이 든다.