https://leetcode.com/problems/reverse-linked-list-ii/description
Q. list가 주어지고, left, right 가 주어질 때, 이 left, right만 list를 뒤집어라.
Solution.
리스트 뒤집기 함수를 먼저 만든다, 그리고 연결 부분에 신경 쓴다.
더보기
public class Solution {
public ListNode ReverseBetween(ListNode head, int left, int right)
{
--left; --right;
int idx = 0;
ListNode nodeResume = findNode(head, right+1);
ListNode node = head;
ListNode rHead, prev = null;
while(node != null)
{
if(idx == left)
{
ListNode rTail = node;
rHead = ReverseList(node, right-left+1);
if(prev != null)
prev.next = rHead;
rTail.next = nodeResume;
head = idx>0 ? head : rHead;
break;
}
prev = node;
node = node.next;
++idx;
}
return head;
}
// 대상 index의 노드를 찾는다.
ListNode findNode(ListNode head, int index)
{
int idx = 0;
ListNode node = head;
while(node != null)
{
if(idx == index)
return node;
++idx;
node = node.next;
}
return null;
}
// 특정 위치의 node에서 해당 수 만큼 뒤집는다.
ListNode ReverseList(ListNode head, int count)
{
ListNode node = head;
ListNode prev = null;
if(count <= 0)
return node;
int cnt = 0;
while(node != null)
{
ListNode next = node.next;
node.next = prev;
prev = node;
node = next;
++cnt;
if(cnt == count) break;
}
return prev;
}
}
적절한 결과.
'Leetcode > Top Interview 150' 카테고리의 다른 글
[LinkedList][Medium] 61. Rotate List (0) | 2024.05.27 |
---|---|
[LinkedList][Medium] 82. Remove Duplicates from Sorted List II (0) | 2024.05.26 |
[LinkedList][Medium] 138. Copy List With Random Pointer (0) | 2024.05.26 |
[Stack][Medium] 150. Evaluate Reverse Polish Notation (0) | 2024.05.11 |
[Stack][Medium] 71. Simplify Path (0) | 2024.05.10 |