살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • 고메동 카페
  • key 로 접근
  • 용인맛집
  • 스쿤브레드
  • memoziation
  • 아메리카토노
  • 인절미 티라미수
  • 렌더링 수 줄이기
  • map 하는 법
  • 맛집
  • 피지오필로소피
  • have something to do with
  • React.memo
  • 용인까페
  • go hand in hand
  • 흑임자 크림
  • 용인추천
  • Array로 접근
  • 송계옥
  • 묵리
  • have something to do with뜻
  • 영어공부
  • 현명하게 리액트
  • 고메커피
  • 자세요정
  • 자바스크립트
  • 파스타맛집
  • 스테이크
  • 삼돈식탁
  • 어게인마이라이프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

이유's STUDY/알고리즘 문제풀이

[ 자료구조 ] LinkedList

2021. 8. 26. 10:01
728x90
반응형

다시 시작된.. 자료구조의 세계로.. 

이번엔 링크드 리스트 구분 

힘들었던 점.. ! 우선 nullpointer exception이 너무 나서 그걸 처리하는 게 꽤 많은 힘이 들었다. 

보면 insert 를 할때나 delete 할 때 모두 if 문으로 size 에 맞지 않을 경우 예외처리를 해주어야하는데 해당 부분에서 애를 먹어서 다른 사람들 코드를 좀 창고하였다. ㅎㅎ 

import lombok.val;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

class MyLinkedList {

    // 하나하나의 작은 노드를 생성
    class Node {
        private Object val;
        //다음 노드를 가르키는 필드
        public Node next;

        public Node(Object object) {
            this.val = object;
            this.next = null;
        }
        
    }

    public Node head;
    public Node tail;
    public int size;
    /** Initialize your data structure here. */
    // 그 다음에 링크드리스트 생성자 생성
    public MyLinkedList() {
        size=0;
        tail =null;
        head= null;
    }
    public void print() {
        Node node = head;
        for(int i =0; i<size; i++)
        {
            System.out.print(node.val+"->");
            node = node.next;
        }
        System.out.println("");
        System.out.println("size = " + size);
    }

    /** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */
    public int get(int index) {
        if (index <0 || index>= size)
            return -1;

        int idx = 0;
        Node findNode = head;

        // head node 로 계속 해야한다.
        for(int i =0; i<index; i++) {
            findNode = findNode.next;
        }

        return (int)(findNode.val);
    }


    /** Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. */
    public void addAtHead(int val) {
        Node curNode = new Node(val);
        // 첫번째 노드
        if ( head == null ){
            head = curNode;
            tail = curNode;
            size++;
        }
        // 첫번째가 아닌 노드
        else {
            curNode.next = head;
            head = curNode;
            size++;
        }

    }

    /** Append a node of value val to the last element of the linked list. */
    public void addAtTail(int val) {
       Node curNode = new Node(val);
       // 마지막 노드가 없을 때
       if( tail == null || size == 0){
           head = curNode;
           tail = curNode;
           size++;
       }
       else {
           tail.next = curNode;
           tail = curNode;
           size++;
       }


    }

    /** Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. */
    public void addAtIndex(int index, int val) {
        if(index <0 || index > size)
            return;
        if(index == 0 ){
            addAtHead(val);
        }
        else if(index == size) {
            addAtTail(val);
        }
        else {
            Node curNode = new Node(val);
            Node findNode = head;
            int idx = 0;

            // indexth 번째면은 실제로 index-1 인번째를 찾아야하는 것.
            for(int i =0; i<index -1; i++) {
                findNode = findNode.next;
            }
            Node nextNode = findNode.next;
            findNode.next = curNode;
            curNode.next = nextNode;
            size++;

        }


    }

    /** Delete the index-th node in the linked list, if the index is valid. */
    public void deleteAtIndex(int index) {
        if(size == 0 || index >= size || index <0 )
            return;

        Node findNode = head;
        if(index ==0 ){
            Node nextNode = head.next;
            head = nextNode;
            size--;
            // 해당 예외문 추가
            if(size ==0) {
                tail = null;
            }
        }
        else {
            for(int i =0; i<index-1; i++) {
                findNode= findNode.next;
            }
//            System.out.println("findNode.val = " + findNode.val);
            Node curNode = findNode.next;

            if(curNode.next == null) {
                //curNode 가 tail 이라는 뜻
                tail = findNode;
                findNode.next = null;
            }
            else {
                Node nextNode = curNode.next;
                findNode.next = nextNode;
            }
            size--;

        }

    }
};



public class Main {
    public static int N, M =0;
    public static StringBuilder sb = new StringBuilder();
    public static boolean check[];
    public static int arr[][] = new int[9][9];
    public static void main(String[] args) throws IOException {


        MyLinkedList myLinkedList = new MyLinkedList();
        myLinkedList.addAtTail(3);
        myLinkedList.print();
        myLinkedList.addAtTail(1);
        myLinkedList.print();
        myLinkedList.addAtTail(1);
        myLinkedList.print();
        myLinkedList.addAtTail(4);
        myLinkedList.print();
        myLinkedList.deleteAtIndex(5);
        myLinkedList.print();
        myLinkedList.deleteAtIndex(1);
        myLinkedList.print();
//        myLinkedList.addAtIndex(1, 2);    // linked list becomes 1->2-3



    }

}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'이유's STUDY > 알고리즘 문제풀이' 카테고리의 다른 글

[Leetcode] Add two numbers  (0) 2022.11.01
[ leetcode ] dfs 문제 - number of islands  (0) 2021.11.02
[ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ  (0) 2021.08.11
[ 백준 ] 1560번 - N과 m (2) --- java 이용  (0) 2021.08.06
[ 백준 ] 11729 - 하노이 탑 이동 순서  (0) 2021.08.03
    '이유's STUDY/알고리즘 문제풀이' 카테고리의 다른 글
    • [Leetcode] Add two numbers
    • [ leetcode ] dfs 문제 - number of islands
    • [ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ
    • [ 백준 ] 1560번 - N과 m (2) --- java 이용
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바