
<아이디어>
노드 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;
}
}'PS > Medium' 카테고리의 다른 글
| 1557. Minimum Number of Vertices to Reach All Nodes (Graph) (0) | 2023.05.18 |
|---|---|
| 2130. Maximum Twin Sum of a Linked List (Two Point) (1) | 2023.05.17 |
| 319. Bulb Switcher (Math) (0) | 2023.04.27 |
| 946. Validate Stack Sequences (Stack) (0) | 2023.04.13 |
| 71. Simplify Path (Stack) (0) | 2023.04.12 |