모든 노드에 데이터와 포인터가 존재하고 포인터가 다음 노드를 가리키는 노드로 구성된 데이터 구조를 연결 리스트(Linked list)라고 하며, 배열과 달리 이러한 연결 리스트를 거꾸로 하면 역방향 연결 리스트라고 합니다. 리스트를 리스트의 첫 번째 노드와 나머지 연결 리스트라고 하는 두 부분으로 나누고, 그 중 나머지 연결 리스트에 대해서는 역함수를 호출하고 나머지 연결 리스트는 첫 번째 노드에 연결하는 방식입니다. , 헤드 포인터는 고정되어 있습니다. 이번 주제에서는 자바의 역연결리스트(Reverse Linked List)에 대해 알아보겠습니다.
무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
자바에서는 두 가지 알고리즘을 사용하여 연결 목록을 되돌릴 수 있습니다. 그들은:
아래 단계에서는 반복 알고리즘의 작동 방식을 설명합니다.
아래 단계에서는 재귀 알고리즘의 작동 방식을 설명합니다.
아래에 언급된 예시는 다음과 같습니다
반복 알고리즘을 사용하여 단일 연결 목록을 역전시키는 Java 프로그램
코드:
class List { static Node head1; static class Node { int data1; Node nex; Node(int d1) { data1 = d1; nex = null; } } //The linked list is reversed using this function Node reverselist(Node node1) { Node previous = null; Node curr = node1; Node nex = null; while (curr != null) { nex = curr.nex; curr.nex = previous; previous = curr; curr = nex; } node1 = previous; return node1; } // The contents of linked list are printed void printL(Node node1) { while (node1 != null) { System.out.print(node1.data1 + " "); node1 = node1.nex; } } public static void main(String[] args) { //The values to be inserted in the list before reversing are given here List l = new List(); l.head1 = new Node(30); l.head1.nex = new Node(40); l.head1.nex.nex = new Node(50); l.head1.nex.nex.nex = new Node(60); System.out.println("The items in the linked list that needs to be reversed are"); l.printL(head1); //Function to reverse the list is called here head1 = l.reverselist(head1); System.out.println(""); System.out.println("The items in the reversed linked list are"); l.printL(head1); } }
출력:
반복 알고리즘을 사용하여 단일 연결 목록을 역전시키는 Java 프로그램
코드:
class List { static Node head1; static class Node { int data1; Node nex; Node(int d1) { data1 = d1; nex = null; } } // A recursive function to reverse the linked list Node reverse(Node current, Node previous) { //Last node is marked as head if (current.nex == null) { head1 = current; //previous node is updated with next current.nex = previous; return head1; } //current.nex node is saved for the recursive call Node nex1 = current.nex; //nex is updated current.nex = previous; reverse(nex1, current); return head1; } // Content of the reversed linked list are printed void printL(Node node) { while (node != null) { System.out.print(node.data1 + " "); node = node.nex; } } //Main method is called which prints the reversed linked list by calling the function public static void main(String[] args) { //The values to be inserted in the list before reversing are given here List list = new List(); list.head1 = new Node(20); list.head1.nex = new Node(30); list.head1.nex.nex = new Node(40); list.head1.nex.nex.nex = new Node(50); System.out.println("The items in the linked list that needs to be reversed are"); list.printL(head1); //Function to reverse the list is called here Node result = list.reverse(head1, null); System.out.println(""); System.out.println(""); System.out.println("The items in the reversed linked list are"); list.printL(result); } }
출력:
이 튜토리얼에서는 연결리스트의 역전 개념을 정의를 통해 이해하고, 연결리스트가 역전되는 논리를 설명합니다. 연결리스트를 역전시키는 두 가지 알고리즘인 반복 알고리즘을 설명하고, 재귀 알고리즘을 자바에서 구현하기 위한 프로그래밍 예제도 함께 설명합니다.
위 내용은 자바의 역방향 연결리스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!