https://leetcode.com/problems/reverse-linked-list/description/
- 연결 리스트를 뒤집어라
풀이 1) 재귀 구조로 뒤집기
- 다음 노드 next와 현재 노드 node를 파라미터로 하여 계속해서 재귀 호출
- node.next에는 이전 prev 리스트를 계속 연결해주면서 node가 널이 될 때까지 재귀호출하면 마지막에는 백트래킹되면서 연결 리스트가 거꾸로 연결된다.
- 맨 처음에 리턴된 prev는 뒤집힌 연결 리스트의 첫 번째 노드가 된다.
class Solution {
public ListNode reverse(ListNode node , ListNode prev) {
//현재 노드인 node가 널이면 리턴
if(node == null)
return prev;
//현재 노드의 다음 노드 미리 지정
ListNode next = node.next;
//현재 노드의 다음으로 이전 노드 지정
node.next = prev;
//다음 노드와 현재 노드를 파라미터로 하여 재귀 호출
return reverse(next,node);
}
public ListNode reverseList(ListNode head)
{
return reverse(head,null);
}
}
풀이 2) 반복 구조로 뒤집기
- 현재 노드의 다음 노드로 이전 prev 리스트를 계속 연결하면서 끝날 때까지 반복
- node가 널이 될 때 prev는 뒤집힌 연결 리스트의 첫 번째 노드가 된다.
class Solution {
public ListNode reverseList(ListNode head)
{
ListNode prev = null, node = head;
//노드 끝으로 이동할 때까지 순회
while(node != null)
{
//현재 노드의 다음 노드 미리 지정
ListNode next = node.next;
//현재 노드의 다음으로 이전 노드 지정
node.next = prev;
//이전 노드는 현재 노드로 지정
prev = node;
//미리 지정했던 다음 노드를 현재 노드로 변경
node = next;
}
//prev는 뒤집힌 연결 리스트의 첫 번째 노드
return prev;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[자바 알고리즘 인터뷰] 8장 연결 리스트(5) - 페어의 노드 스왑 (0) | 2024.05.04 |
---|---|
[자바 알고리즘 인터뷰] 8장 연결 리스트 (4) - 두수의 덧셈 (0) | 2024.05.03 |
[자바 알고리즘 인터뷰] 8장 연결 리스트(2) - 두 정렬 리스트의 병합 (0) | 2024.05.03 |
[자바 알고리즘 인터뷰] 8장 연결 리스트(1) 팰린드롬 연결 리스트 (0) | 2024.05.03 |
[자바 알고리즘 인터뷰] 7장 배열(6) - 주식을 사고팔기 가장 좋은 시점 (0) | 2024.05.01 |