Reverse Linked List - LeetCode
문제는 일반적인데 활용도가 높은 문제로 쓰인다.
반복 구조로 뒤집기
Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
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;
}
}
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode node = head;
while (node != null) {
System.out.println("Current node value: " + node.val);
ListNode next = node.next; // 현재 노드의 다음 노드 미리 지정
System.out.println("Next node value: " + (next != null ? next.val : "null"));
node.next = prev; // 현재 노드의 다음으로 이전 노드 지정
System.out.println("node.next set to prev value: " + (prev != null ? prev.val : "null"));
prev = node; // 이전 노드는 현재 노드로 지정
System.out.println("Prev set to current node value: " + prev.val);
node = next; // 미리 지정했던 다음 노드를 현재 노드로 변경
System.out.println("Current node updated to next value: " + (node != null ? node.val : "null"));
System.out.println("----"); }
return prev;
}
public static void main(String[] args) {
// 예제 리스트 노드 생성
ListNode node5 = new ListNode(5);
ListNode node4 = new ListNode(4, node5);
ListNode node3 = new ListNode(3, node4);
ListNode node2 = new ListNode(2, node3);
ListNode head = new ListNode(1, node2);
Solution solution = new Solution();
ListNode reversedHead = solution.reverseList(head);
// 결과 출력
System.out.print("Reversed list: ");
ListNode node = reversedHead;
while (node != null) {
System.out.print(node.val + " ");
node = node.next;
}
}