📌 문제
📌 문제 풀이
- c.next 의 값이 prev가 돼야 한다.
- c.next = prev 여야 하는데, 그러면 c.next의 값이 날라가므로, c.next의 값을 저장해놓는다.
ListNode next = c.next;
c.next = prev;
- prev의 값은 current의 값이어야 한다. 아까 저장한 next 값을 prev에 넣어주자.
ListNode next = c.next;
c.next = prev;
prev = current;
- 마지막으로 current는 next가 돼야 전진을 한다. 아까 저장한 next의 값을 current에 넣어주자.
ListNode next = c.next;
c.next = prev;
prev = current;
current = next;
- return 값을 뭐로 해줘야 되는지 헷갈렸다. 마지막에 current는 null이 되고, null 이전값인 prev가 첫 시작 노드가 된다.
📌 코드
public class Main {
public static void main(String[] args) {
ListNode li1 = new ListNode(1);
li1.add(2);
li1.add(3);
li1.add(4);
li1.add(5);
li1.add(6);
li1.add(7);
li1.add(8);
Solution solution = new Solution();
ListNode listNode = solution.reverseList(li1);
listNode.print();
}
public static class ListNode {
Integer val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
// this 를 받을 방법을 못하고, next 로 조작하고 있었다.
void add(int val){
ListNode node = new ListNode(val);
ListNode n = this;
while(n.next !=null){
n=n.next;
}
n.next = node;
}
void print(){
ListNode node = this;
while(node.next!=null){
System.out.println(node.val);
node=node.next;
}
System.out.println(node.val);
}
}
static class Solution {
public ListNode reverseList(ListNode head) {
ListNode current = head;
ListNode next = null;
ListNode prev =null;
while(current!=null){
next = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
}
}
댓글