내용

글번호 626
작성자 heojk
작성일 2017-04-11 16:08:13
제목 연결 리스트 구현
내용 연결리스트 파워포인트 파일 다운로드 LinkedList.java
public class LinkedList {
	private static class Node {
		private Object data;
		private Node next;
		private Node(Object data) {
			this.data = data;
			next = null;
		}
		public String toString(){
			return String.valueOf(this.data);
		}
	}
	private Node head = new Node(null);
	private Node tail = new Node(null);
	private int size = 0;

	public static void main(String[] args) {
		LinkedList numbers = new LinkedList();
		numbers.add(10);
		numbers.add(20);
		numbers.add(30);
		numbers.add(40);
		System.out.println(numbers);
		System.out.println(numbers.get(0));
		System.out.println(numbers.get(1));
		System.out.println(numbers.get(4));
		System.out.println(numbers.delete(1));
		System.out.println(numbers);
		System.out.println(numbers.delete(0));
		System.out.println(numbers);
		try {
			System.out.println(numbers.delete(2));
		}catch(RuntimeException e) {
			System.out.println(e.getMessage());
		}
		System.out.println(numbers.delete(1));
		System.out.println(numbers);
		System.out.println(numbers.insert(60, 0));
		System.out.println(numbers);
		System.out.println(numbers.insert(70, 1));
		System.out.println(numbers);
		try {
			System.out.println(numbers.insert(70, 5));
		}catch(RuntimeException e) {
			System.out.println(e.getMessage());
		}
		System.out.println(numbers);
	}

	public int size() {
		return size;
	}

	public void add(Object input) {
		Node newNode = new Node(input);
		if(head.next == null) {
			head.next = newNode;
			tail.next = newNode;
		}else {
			tail.next.next = newNode;
			tail.next = newNode;
		}
		size++;
	}

	public String toString() {
		Node node = head.next;
		if(node == null) {
			return "[]";
		}
		String str = size + " [";
		while(node != null) {
			str += node.toString();
			if(node != tail.next) {
				str += ", ";
			}
			node = node.next;
		}
		str += "]";
		return str;
	}

	public Node get(int index) {
		Node node = head.next;
		for(int i=0; node!=null; i++) {
			if(index == i) {
				break;
			}else {
				node = node.next;
			}
		}
		return node;
	}

	public Node delete(int position) {
		Node curNode = get(position);
		if(curNode == null) {
			throw new RuntimeException("잘 못된 삭제 위치입니다.");
		}else {
			if(position==0) {
				head.next = curNode.next;
			}else {
				Node prevNode = get(position-1);
				prevNode.next = curNode.next;
				if(tail.next == curNode) {
					tail.next = prevNode;
				}
			}
			size--;
		}
		return curNode;
	}

	public Node insert(Object data, int position) {
		Node newNode = new Node(data);
		Node curNode = get(position);
		if(curNode == null) {
			throw new RuntimeException("잘 못된 삽입 위치입니다.");
		}else {
			if(position==0) {
				newNode.next = head.next;
				head.next = newNode;
			}else {
				Node prevNode = get(position-1);
				newNode.next = prevNode.next;
				prevNode.next = newNode;
			}
			size++;
		}
		return newNode;
	}
}