Leetcode Java Reverse Linked List II
업데이트:
문제
코드
/**
* 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 reverseBetween(ListNode head, int left, int right) {
ListNode temp = new ListNode(0, head);
ListNode pre = temp;
ListNode cur = head;
int idx = 1;
while (cur.next != null && idx != left) {
cur = cur.next;
pre = pre.next;
idx++;
}
while (cur.next != null && idx != right) {
ListNode preNext = pre.next;
ListNode curNext = cur.next;
pre.next = cur.next;
cur.next = curNext.next;
curNext.next = preNext;
idx++;
}
return temp.next;
}
}
결과
설명
-
주어진 ListNode인 head의 left번째 ListNode부터 right번째 ListNode를 역순으로 반전시키는 문제이다.
- 문제 해결을 위한 기본 변수를 정의한다.
- 주어진 ListNode인 head를 역순으로 반전시키기 위해 새로운 ListNode의 next값에 head를 넣은 temp를 정의한다.
- head를 반전시키기 위한 임시변수인 pre와 cur을 temp와 head를 각각 넣어 정의한다.
- 반전시키는 구간을 체크하기 위한 index인 idx를 정의한다.
-
반전시키기 위한 시작 위치인 left 전까지 반복문을 통해 cur과 pre를 다음 값으로 넘겨준다.
- 반전이 끝나기 위한 종료 위치인 right까지 반복문을 통해 위치를 반전시켜준다.
- pre의 next 값을 임시 저장할 preNext와 cur의 next 값을 임시 저장할 curNext를 정의한다.
- pre의 next에 cur의 next를, cur의 next에 curNext의 next 값을, curNext의 next에 preNext 값을 넣어 위치를 left번째 위치부터 idx번째 위치까지 값을 반전시킨다.
- idx를 증가시키고 반복을 계속한다.
- 반복이 완료되면 temp의 next를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기