LinkedList는 값을 넣을때는 큐와 마찬가지로 차곡차곡 넣지만
뺄때는 원하는 위치에 있는 값을 뺄수 있다는 장점이있다
이해를 돕기위해 직접 코드로 구현해보자
먼저 값을 저장할 Node 클래스를 만들어보자
해당 데이터의 값을 String타입으로 data라는 변수에 담아주고
자기 참조를 활용해 next라는 곳에 객체를 담도록 설계해주도록 해준다
LinkedList의 맨 앞부분을 가르킬 head 라는 변수를 선언해주고
생성자는 처음 생성시 head는 null인 상태가 되도록 만들어주자
다음은 노드를 추가해주는 addElement 메소드를 만들어보자
지역변수 createNode를 생성해 사용자 입력값을 담아주고
제일 처음 넣을때엔 createNode의 주소값을 head에 넣어준뒤
두번째에 넣은 값부터는 createNode 두번째주소값을 preNode의 next에
넣어주도록 설계해보도록 하자
head의 주소값(제일 처음넣은 값을 저장한 객체의 주소)을 preNode에 넣어준뒤
preNode의 next에 두번째 값의 주소를 넣어주도록 설계 해주자
그림으로 표현하자면
처음에 야스오를 넣고 그다음은 티모를 넣고 그다음은 소라카를 넣는다고 가정 할때
처음 야스오를 넣을때엔 head에 주소를 저장을 해준다 이때 next값은 null이 담긴다
그다음 티모를 넣을땐 preNode를 head주소에 접근시켜 next에 티모주소값을 넣도록 설계해준다
세번째로 소라카를 넣을때에 처음 야스오 접근하여 preNode의 주소값을 next 주소값으로 바꾸어 티모로 접근한뒤 티모의 next 주소값에 소라카 주소값을 추가해주는 형식을 반복한다
다음은 노드 주소를 삭제하는 메소드를 만들어보자
우선은 방어적 코드로 요청한 넘버가 인덱스넘버를 초과한다면 경고메세지를 출력하게 만들고
0번째 노드 주소를 삭제요청을 한다면 head에 tempNode.next 즉 head.next값을 담아주자
그 외의 주소를 삭제요청 한다면 preNode.next에 삭제할 주소를 담도록 tempNode.next가 null이 되도록 설계를 하면 삭제할 주소에는 null이 담기게 된다
다음은 노드를 전부 출력하는 메소드를 만들어보도록 하자
처음엔 temp에 head의 주소값을 담아두고 temp의 data값을 출력하고
temp의 next주소를 temp에 덮어씌우면서 다음 노드를 출력시키도록 반복하게
설계해주도록 하자 만약 이 과정에서 temp가 null이 아니라면 -->를 출력하도록 해서
중간에 화살표를 넣도록 설계한다
다음은 지정한 인덱스 넘버에있는 노드 즉 index 번째 next 노드주소를 출력하는 메소드를 만들어보자
역시나 주소를 담아둘 tempNode에 처음에는 head주소를 담아준다
만약 index가 2라면 반복문을 2번 반복해
tempNode > tempNode.next > tempNode.next.next 를 리턴하도록 설계해주자
이제 만들어준 코드를 실행해보자
첫번째에는 야스오라는 값을 두번째는 티모 세번째는 소라카를 담고 출력해보자
첫번째 야스오를 담았을때 head의 next주소에는 null값이 나온다
두번째 티모를 담았을때 head의 next주소에는 정상적으로 티모의 주소가 담겨있고 getData에도 티모가 찍힌다
세번째도 마찬가지
이번에는 삭제하는 메소드를 실험해보자
0번째 요소 야스오가 정상적으로 삭제된것을 확인할수있고
전체삭제 또한 정상적으로 작동되는것을 확인할수있다.
'Java' 카테고리의 다른 글
Set 인터페이스 (0) | 2024.05.24 |
---|---|
List 인터페이스 (2) | 2024.05.24 |
배열을 활용한 큐 구현하기 (0) | 2024.05.21 |
배열을 활용하여 객체 만들기 (0) | 2024.05.21 |
자료구조 (1) | 2024.05.07 |