<아이디어>

노드 2개씩 바꾸는 작업을 하기 때문에 3가지 노드의 위치를 구하고 

Node pre(이전 노드)

Node cur(현재 노드)

Node next(다음 순서로 작업해야 할 노드)

<연결 교환 작업>

cur -> cur.next.next

cur.next -> cur 

pre -> cur.next

 

<정답코드>

class Solution {
    // 시간 복잡도 O(n) 공간 복잡도 O(n)
    public ListNode swapPairs(ListNode head) {
        if(head==null||head.next==null) return head;
        ListNode tmp = head;
        ListNode prev = new ListNode();
        // 연결고리의 제일 앞의 노드가 오도록 최신화
        head = tmp.next;
        while(tmp.next!=null){
            ListNode switchOp1 = tmp;
            ListNode switchOp2 = tmp.next;
            // 다음 타순으로 변경할 노드
            ListNode next = tmp.next.next;
            // 교환 작업
            switchOp1.next = next;
            switchOp2.next = tmp;
            // 이전 노드의 연결 최신화
            prev.next = switchOp2;
            prev = switchOp1;
            // 다음 타순으로 변경할 노드가 없다면 중지
            if(next==null) break;
            tmp = next;
        }

        return head;
    }
}

+ Recent posts