알고리즘 체조 17
Rotate a Linked List
설명
단일 링크 리스트의 헤드 노드와 정수 n 를 지정하면(자), 링크 리스트를 n 회전시키는 알고리즘 체조.
다음 두 가지 예가 있습니다. 인수로서 건네받은 링크 리스트와 정수 n = 2 회전 후의 출력입니다.
n 의 값은, 링크 리스트의 길이보다 커질 가능성이 있는 것에 주의해 주세요.
n = -2일 때,
Solution
Runtime Complexity O(n)
n은 링크 목록의 길이입니다.
Memory Complexity O(1)
새로운 데이터 구조를 사용할 필요가 없습니다. 포인터 전용.
조정된 숫자는 항상 정수 N입니다(0<=N
'백문은 겉보기에 불과하다'는 것으로 위의 알고리즘으로 n=2의 위의 링크 리스트를 회전시켜 보자.
구현
RotateList.java
class RotateList{
private int getListSize(LinkedListNode head) {
LinkedListNode curr = head;
int listSize = 0;
while (curr != null) {
listSize++;
curr = curr.next;
}
return listSize;
}
private int adjustRotatationsNeeded(int n, int length) {
return n < 0 ? length - (n * -1) % length : n % length;
}
public LinkedListNode rotate_list(LinkedListNode head, int n) {
int listSize = 0;
listSize = getListSize(head);
n = adjustRotatationsNeeded(n, listSize);
if (n == 0) {
return head;
}
// Find the startNode of rotated list.
// If we have 1,2,3,4,5 where n = 2,
// 4 is the start of rotated list
LinkedListNode temp = head;
int rotationsCount = listSize - n - 1;
while(rotationsCount > 0) {
temp = temp.next;
rotationsCount--;
}
LinkedListNode new_head = temp.next;
temp.next = null;
LinkedListNode tail = new_head;
while (tail.next != null) {
tail = tail.next;
}
tail.next = head;
head = new_head;
return new_head;
}
}
Reference
이 문제에 관하여(알고리즘 체조 17), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yutakihara/items/a6ee7bfdce6565c2b1ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)