원형 이중 연결 리스트는 이전 노드와 다음 노드를 가리키는 포인터가 2개 존재하기 때문에 역순으로 만드는 작업은 복잡한 작업입니다.원형 이중 연결 리스트 역순으로 출력하기역순으로 출력하는 작업은 간단합니다. start 지점에서 prev로 리스트에 가장 뒤쪽에 있는 노드로 이동한 다음에 prev를 통해서 start까지 출력하면됩니다.static void reversePrint(Node n) { if(start == null) return; do { System.out.println(n.prev.data); n = n.prev; } while(start != n);} 원형 이중 연결 리스트 뒤집기(모든 노드)모든 노드의 next와 prev ..
목록 끝이나 빈 리스트에 삽입 public class CircularDoublyLinkedList { static Node start; public static void main(String[] args) { insertEnd(1); insertEnd(2); insertEnd(3); printList(start); } static void insertEnd(int data) { Node newNode = new Node(data); if(start == null) { newNode.next = newNode.prev = newNode; start = newNode; return; } Node last = start.prev; newNode.next = start; newNode.prev = last; l..
원형 단일 연결 리스트 데이터 추가 원형 연결 리스트를 구현할려면 마지막 노드를 가리키는 외부 포인터를 사용합니다. 마지막 노드를 가리키는 포인터 last의 next는 첫번째 노드를 가리킬 것입니다. 첫 번째 노드가 아닌 마지막 노드를 가리키는 포인터 사용 이유 첫 번째 노드에 추가하려면 전체 리스트를 탐색해야됩니다. 마지막 노드에 추가하려해도 전체 리스트 탐색해야합니다. start 포인터 대신 last 포인터를 사요하면 위 두 경우 전체 목록을 탐색할 필요가 없습니다. 빈 리스트에 데이터 추가 빈 리스트에 추가 후 last 포인터는 새로 추가된 노드를 가리킵니다. 새 노드는 첫 번째이자 마지막 노드입니다. public class CircularLinkedList { static Node last; pu..
원형 연결 리스트는 모든 노드가 원으로 연결되어 있는 리스트입니다. 첫 번째 노드와 마지막 노드가 서로 연결되어 원을 형성합니다. 끝에 NULL은 없습니다. 원형 단일 연결 리스트 원형 단일 연결 리스트에서는 마지막 노드에 첫 번째 노드에 대한 포인터가 있습니다. 동일한 노드에 도달할 때까지 원형 단일 연결 리스트를 탐색합니다. 원형 단일 연결 리스트에서는 시작이나 끝이 없습니다. 노드 포인터에는 null 값이 없습니다. 원형 단일 연결 리스트 표현 public class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } 기본 원형 단일 연결 리스트 public class Node { int..
이중 연결 리스트에서 노드 삭제는 3가지를 생각해야 합니다. 헤드 노드 삭제 중간 노드 삭제 마지막 노드 삭제 public class DoublyLinkedList { static Node head; public static void main(String[] args) { push(1); push(2); push(3); deleteNode(head.next); printList(head); } static void push(int data) { Node newNode = new Node(data); newNode.next = head; if(head != null) head.prev = newNode; head = newNode; } static void deleteNode(Node del) { if(h..
이중 연결 리스트의 시작 부분에 데이터 추가 새 노드에 메모리를 할당하고 제공된 값을 해당 데이터 필드에 할당합니다. 새 노드 이전 포인터를 null로 설정합니다. 리스트가 비어있는 경우 새로운 노드 다음 포인터를 null로 설정합니다. 헤드를 새로운 노드로 업데이트합니다. 리스트가 비어있지 않은 경우 새로운 노드 다음 포인터를 현재 헤드로 설정합니다. 현재 헤드의 이전 포인터를 새로운 노드로 변경합니다. 헤드를 새로운 노드로 업데이트합니다. static void push(int data) { Node newNode = new Node(data); newNode.next = head; if(head != null) head.prev = newNode; head = newNode; } 지정된 노드 next..