Leetcode Java Swapping Nodes in a Linked List

업데이트:

문제

Link

코드

/**
 * 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 swapNodes(ListNode head, int k) {
    ListNode first = null;
    ListNode last = null;
    for (ListNode listNode = head; listNode != null; listNode = listNode.next) {
      if (last != null) {
        last = last.next;
      }
      if (--k == 0) {
        first = listNode;
        last = head;
      }
    }
    int temp = first.val;
    first.val = last.val;
    last.val = temp;
    return head;
  }

}

결과

Link

설명

  1. head의 앞과 뒤에서 k번째 ListNode의 값을 바꾸는 문제이다.

  2. first와 last는 앞과 뒤에서 k번째 ListNode를 담을 변수로, 들 다 null로 초기화한다.

  3. head부터 null까지 listNode를 다음 ListNode로 이동하면서 아래를 반복한다.
    • last가 null이 아니면 last를 다음 ListNode로 이동시킨다.
    • k를 감소시키고 k가 0인 경우, first에 listNode를 last에 head를 넣어준다.
  4. 반복이 완료되면 temp와 last의 값을 바꾸고 head를 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기