본문 바로가기
알고리즘/📌leetcode

Reverse LinkedList

by IMSfromSeoul 2021. 11. 28.

📌 문제

  • 위처럼 Node 순서 뒤집기

📌 문제 풀이

  • 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;
        }
    }
}

'알고리즘 > 📌leetcode' 카테고리의 다른 글

Binary Tree Level Order Traversal  (0) 2021.11.30
BaseBall Game , Valid Parentheses  (0) 2021.11.28
Merge K Sorted List  (0) 2021.11.28
Add Two Numbers  (0) 2021.11.28
Longest Substring Without Repeating Characters  (0) 2021.11.24

댓글