본문 바로가기
CodeSignal

rearrangeLastN

by Doromi 2024. 3. 20.
728x90
반응형

단일 연결 리스트에서 마지막 n개의 노드를 리스트의 시작 부분으로 이동

주어진 단일 연결 리스트에서 마지막 n개의 노드를 리스트의 시작 부분으로 이동시켜야 합니다. 예를 들어:

입력 리스트가 [1, 2, 3, 4, 5]이고 n이 3이면, 결과는 [3, 4, 5, 1, 2]가 되어야 합니다.
입력 리스트가 [1, 2, 3, 4, 5, 6, 7]이고 n이 1이면, 결과는 [7, 1, 2, 3, 4, 5, 6]이 되어야 합니다.

// Singly-linked lists are already defined with this interface:
// class ListNode<T> {
//   public T value { get; set; }
//   public ListNode<T> next { get; set; }
// }
//
ListNode<int> solution(ListNode<int> l, int n) {
    int len = 0;
    
    ListNode<int> head = l;
    if(head == null || n == 0) return l;
    
    while(head != null){
        len++;
        head = head.next;
    }
    head = l;
    
    for(int i = 0;i<len-n;i++){
        head = head.next;
    }
    ListNode<int> connectNext = head;
    for(int i = 0;i<n-1;i++){
        connectNext = connectNext.next;
    }
    
    for(int i = 0;i<len-n;i++){
        connectNext.next = l;
        l = l.next;
        connectNext = connectNext.next;
        }
    connectNext.next = null;
        
    return head;
    
}
 주어진 단일 연결 리스트에서 마지막 n개의 노드를 리스트의 시작 부분으로 이동시키는 작업을 수행합니다.

len 변수를 초기화하여 연결 리스트의 길이를 추적합니다.
만약 입력 리스트 l이 비어 있거나 n이 0이면 원래 리스트를 그대로 반환합니다.
리스트의 길이를 계산하기 위해 반복문을 사용합니다.
그런 다음 head 포인터를 원래 리스트로 다시 설정합니다.
다음 반복문은 끝에서부터 n번째 노드로 head 포인터를 이동시킵니다.
또 다른 포인터인 connectNext는 head와 같은 위치로 설정됩니다.
마지막 반복문은 노드를 재배치하여 마지막 n개의 노드를 리스트의 시작 부분에 연결합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

reverseNodesInKGroups  (0) 2024.03.15
mergeTwoLinkedLists  (4) 2024.03.14
addTwoHugeNumbers  (0) 2024.03.11
isListPalindrome  (0) 2024.03.09
removeKFromList  (0) 2024.03.08