Java-ohjelma LinkedListin keskiosan saamiseksi yhdellä iteraatiolla

Tässä esimerkissä opitaan saamaan linkitetyn luettelon keskielementti yhdeksi Java-iteraatioksi.

Ymmärtääksesi tämän esimerkin, muista käydä ensin seuraavissa opetusohjelmissa,

  • Java LinkedList -luokka
  • LinkedList-tietorakenne

Esimerkki 1: Hanki LinkedListin keskielementti yhteen hakuun

 class LinkedList ( // create an object of Node class // represent the head of the linked list Node head; // static inner class static class Node ( int value; // connect each node to next node Node next; Node(int d) ( value = d; next = null; ) ) public static void main(String() args) ( // create an object of LinkedList LinkedList linkedList = new LinkedList(); // assign values to each linked list node linkedList.head = new Node(1); Node second = new Node(2); Node third = new Node(3); // connect each node of linked list to next node linkedList.head.next = second; second.next = third; // print the linked list Node pointer = linkedList.head; System.out.print("LinkedList: " ); while (pointer != null) ( System.out.print(pointer.value + " "); pointer = pointer.next; ) // Find the middle element Node ptr1 = linkedList.head; Node ptr2 = linkedList.head; while (ptr1.next != null) ( // increase the ptr1 by 2 and ptr2 by 1 // if ptr1 points to last element // ptr2 will points to middle element ptr1 = ptr1.next; if(ptr1.next !=null) ( ptr1 = ptr1.next; ptr2 = ptr2.next; ) ) System.out.println("Middle Element: " + ptr2.value); ) )

Tuotos

 LinkedList: 1 2 3 Keskiosa: 2

Yllä olevassa esimerkissä olemme toteuttaneet linkitetyn luettelon tietorakenteen Java: ssa. Sitten löydämme linkitetyn luettelon keskielementin yhdestä silmukasta. Huomaa koodi,

  while (ptr1.next != null) ( // increase the ptr1 by 2 and ptr2 by 1 // if ptr1 points to last element // ptr2 will points to middle element ptr1 = ptr1.next; if(ptr1.next !=null) ( ptr1 = ptr1.next; ptr2 = ptr2.next; ) )

Tässä meillä on kaksi muuttujaa ptr1 ja ptr2. Käytämme näitä muuttujia iteroimaan linkitetyn luettelon läpi.

Jokaisessa iteraatiossa ptr1 käyttää kahta solmua ja ptr2 käyttää linkitetyn luettelon yksittäistä solmua.

Nyt, kun ptr1 saavuttaa linkitetyn luettelon loppuun, ptr2 on keskellä. Tällä tavalla voimme saada keskitetyn linkitetyn luettelon yhdellä iteraatiolla.

Esimerkki 2: Hanki LinkedListin keskielementti käyttämällä LinkedList-luokkaa

 import java.util.LinkedList; class Main ( public static void main(String() args)( // create a linked list using the LinkedList class LinkedList animals = new LinkedList(); // Add elements to LinkedList animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("LinkedList: " + animals); // access middle element String middle = animals.get(animals.size()/2); System.out.println("Middle Element: " + middle); ) )

Tuotos

 LinkedList: (Kissa, Koira, Hevonen) Keskielementti: Koira

Yllä olevassa esimerkissä olemme käyttäneet LinkedListluokkaa linkitetyn luettelotietorakenteen toteuttamiseen. Huomaa ilmaisu,

 animals.get(animals.size()/2)
  • size () / 2 - palauttaa keskielementin sijainnin
  • get () - palauttaa elementin keskiasentoon

Mielenkiintoisia artikkeleita...