알고리즘_LinkedList(리스트)

2022. 11. 10. 08:58·알고리즘/구현

2022년 11월 6일 코딩 스터디를 진행하며 LinkedList의 방식을 직접 구현한 것입니다.


package linkedList;

public class Main {
   public static void main(String[] args) {
      LinkedList numbers = new LinkedList();
      numbers.addLast(10);
      numbers.addLast(20);
      numbers.addLast(30);
      numbers.add(2,25);
      System.out.println(numbers.toString());
      numbers.remove(2);
      System.out.println(numbers.toString());
      System.out.println(numbers.get(0));
      System.out.println("size: "+numbers.size());
   }
}

package linkedList;

public class LinkedList {
   private Node head;
   private Node tail;
   private int size = 0;
   private class Node{
      private Object data;
      private Node next;
      public Node(Object input) {
         this.data = input;
         this.next = null;
      }
      public String toString() {
         return String.valueOf(this.data);
      }
   }
   
   public void addFirst(Object input) {
      Node newNode = new Node(input);
      newNode.next = head;
      head = newNode;
      size++;
      if(head.next==null) {
         tail = head;
      }
   }
   
   public void addLast(Object input) {
      Node newNode = new Node(input);
      if(size==0) {
         addFirst(input);
      }else {
         tail.next = newNode;
         tail = newNode;
         size++;
      }
   }
   
   public Node node(int index) {
      Node x = head;
      for(int i=0;i<index;i++) {
         x = x.next;
      }
      return x;
   }
   
   public void add(int k, Object input) {
      if(k==0) {
         addFirst(input);
      }else {
         Node temp1 = node(k-1);
         Node temp2 = temp1.next;
         Node newNode = new Node(input);
         temp1.next = newNode;
         newNode.next = temp2;
         size++;
      }
   }
   
   public void removeFirst() {
      Node temp = head;
      head = head.next;
      temp = null;
   }
   
   public void remove(int index) {
      if(index==0) {
         removeFirst();
      }else {
         Node temp = node(index-1);
         Node tobeDeleted = temp.next;
         temp.next = tobeDeleted.next;
         if(tobeDeleted == tail) {
            tail = temp;
         }
         tobeDeleted = null;
         size--;
      }
   }
   
   public Object get(int index) {
      Node x = node(index);
      return x.data;
   }
   
   public int size() {
      return this.size;
   }
   
   public String toString() {
      if(head == null) {
         return "[]";
      }
      Node temp = head;
      String str = "[";
      while(temp.next != null) {
         str += temp.data + ", ";
         temp = temp.next;
      }
      str += temp.data; // tail 값 넣어주기
      return str+"]";
   }
}

'알고리즘 > 구현' 카테고리의 다른 글

알고리즘_MinHeap(최소힙)  (1) 2022.11.10
알고리즘_ArrayList  (0) 2022.11.10
알고리즘_이진트리  (0) 2022.10.20
알고리즘_queue(선형)  (1) 2022.10.04
'알고리즘/구현' 카테고리의 다른 글
  • 알고리즘_MinHeap(최소힙)
  • 알고리즘_ArrayList
  • 알고리즘_이진트리
  • 알고리즘_queue(선형)
뚤떡이
뚤떡이
프로그래밍을 알아가며 저와 함께 성장하는 블로그 입니다
  • 뚤떡이
    뚤떡이의 발개벗긴개발
    뚤떡이
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • Docker (2)
      • 자바 (29)
        • start (10)
        • calcu (4)
        • process (7)
      • 플러터 (1)
      • 알고리즘 (12)
        • 개념 (2)
        • 구현 (5)
        • 백준 (0)
        • 프로그래머스 (5)
      • 이클립스 (4)
        • 초기설정 (4)
      • SQL (5)
      • IT 잡동사니 (10)
      • 개발 관련 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    #번역
    스팸메일 #메일보안 #gophish #it보안 #오픈소스
    #electron
    MAC 크롬 원격
    #python #개발일지 #번역 #메모리최적화 #websocket #redis #비동기프로그래밍
    #개발일지
    IT자산관리
    #python
    #자동화
    요구사항 정의서
    크롬 원격 데스크톱
    synology
    #프로젝트
    시놀로지
    윈도우 크롬 원격
    GLPI
    개발일지 #프로젝트후기 #gpt4 #번역 #자동화 #python #electron
    크롬 원격
    #apachesuperset #시놀로지 #db2 #데이터시각화 #기술블로그
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
뚤떡이
알고리즘_LinkedList(리스트)
상단으로

티스토리툴바