본문 바로가기
FullStack/21. Java

[알고리즘] 링크리스트

by nakanara 2014. 3. 24.
반응형


삭제 추가가 용의한 Linked 리스트.





* 링크드 리스트.

package com.nakanara.list;

public class List {

    private Item headList = new Item(0);    // 시작 점.
    private Item LastLint = headList;    // 마지막 입력 점.   
    private int size = 0;    // 전체 사이즈.
   
   
    /**
     * 정보 추가.
     * @param val
     */
    public void add(int val) {
        Item item2 = new Item(val);
        LastLint.add(item2);
        LastLint = item2;
        ++size;
    }
   
    /**
     * 특정 Item 뒤에 추가.
     * @param i
     * @param val
     */
    public void add(Item i, int val) {
        Item item2 = new Item(val);
        item2.add(i.nextVal());
        i.add(item2);
       
        ++size;
    }
   
    /**
     * 해당 순서에 있는 정보를 돌려준다.
     * @param index
     * @return
     */
    public Item get(int index) {
       
        if(size < index) {
            System.out.println("입력된 범위를 초과하였습니다.");
            return null;
        }
       
        Item item = headList.nextVal();
        int i=0;
       
        while(item != null) {
           
            if(i==index) {
                return item;
            }
           
            item = item.nextVal();
            ++i;
        }
       
        return null;
    }
   
    /**
     * 삭제.
     * @param i
     */
    public void remove(Item i){
       
        if(size <= 0) {
            System.out.println("삭제할 데이터가 없습니다.");
            return;
        }
       
        Item item = headList.nextVal();    // 실제 데이터.
        Item beforeItem = headList;    // 삭제시 앞 list에 붙이기 위한 정보
       
        while(item != null) {
            item.print();
           
            if(i == item) {    // 삭제.
                Item delItem = item;    // 삭제 데이터를 임시 저장하기 위한 장소.
               
                item = item.nextVal();
                beforeItem.add(item);
                delItem = null;
                --size;
                return;
               
            } else {
                beforeItem = item;
                item = item.nextVal();
            }
        }
       
    }
   
   
   
    @Override
    public String toString() {
        Item item = headList.nextVal();
        StringBuffer buffer = new StringBuffer();
        int i=0;
       
        while( item != null ) {
            buffer.append( (i++)).append(" item=").append(item.getData()).append("\n");
            item = item.nextVal();
        }
       
        return buffer.toString();
    }

    public static void main(String args[]){
        List list = new List();
       
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        System.out.println(list.toString());
       
        Item i = list.get(1);
        list.remove(i);
        list.remove(list.get(1));

        System.out.println(list.toString());
       
        list.add(list.get(1), 99);
        System.out.println(list.toString());
       
       
    }
}




* 데이터 객체

package com.nakanara.list;

/**
 * 데이터가 저장될 공간.
 * @author nakanara
 *
 */
public class Item {
   
    private int data;    // 데이터
    private Item nextItem = null;    // 다음 ITEM 을 가기 위한 정보

    public Item(int val) {
        data = val;
    }
   
    public void add(Item nextItem) {
        this.nextItem = nextItem;
    }
   
   
    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Item nextVal(){
        return this.nextItem;
    }

    @Override
    public String toString() {
        return ""+data;
    }
   
    public void print(){
        System.out.println("  " + toString());
    }
}
 


반응형

'FullStack > 21. Java' 카테고리의 다른 글

엑셀 POI. Cell Number 포맷 문자로 읽기.  (1) 2014.08.19
[알고리즘] 퀵정렬  (0) 2014.04.02
[알고리즘] 선형 Queue.  (0) 2014.03.24
[알고리즘] Stack  (0) 2014.03.24
META-INF 폴더  (0) 2013.03.27