English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المثال، سنتعلم كيفية الحصول على العنصر الوسط لـ LinkedList في تمرير مرة واحدة في Java.
للحصول على هذا المثال، تأكد من أنك قمت بزيارة التدريب التالي أولاً،
class LinkedList { //إنشاء عميل فئة Node //يُمثل رأس القائمة Node head; //فئة داخلية ثابتة static class Node { int value; //ربط كل عقدة إلى العقدة التالية Node next; Node(int d) { value = d; next = null; } } public static void main(String[] args) { //إنشاء عميل LinkedList LinkedList linkedList = new LinkedList(); //لإعداد قيمة كل عنصر من عناصر القائمة linkedList.head = new Node(1); Node second = new Node(2); Node third = new Node(3); //ربط كل عقدة في قائمة المتصلة بالعقدة التالية linkedList.head.next = second; second.next = third; //طباعة قائمة المتصلة Node pointer = linkedList.head; System.out.print("LinkedList: "); while (pointer != null) { System.out.print(pointer.value + " "); pointer = pointer.next; } //إيجاد العنصر الوسط Node ptr1 = linkedList.head; Node ptr2 = linkedList.head; while (ptr1.next != null) { //زيادة ptr1 بـ2، وزيادة ptr2 بـ1 //إذا كان ptr1 يشير إلى العنصر الأخير //ptr2 سيقوم بالإشارة إلى العنصر الوسط ptr1 = ptr1.next; if(ptr1.next != null) { ptr1 = ptr1.next; ptr2 = ptr2.next; } } System.out.println("\nالعنصر الوسط: " + ptr2.value); } }
نتائج الإخراج
LinkedList: 1 2 3 العنصر الوسط: 2
في المثال السابق، قمنا بإنشاء بنية البيانات لقائمة المتصلة باستخدام Java. ثم عثرنا على العنصر الوسط في دورة واحدة. لاحظ الكود،
while (ptr1.next != null) { //زيادة ptr1 بـ2، وزيادة ptr2 بـ1 //إذا كان ptr1 يشير إلى العنصر الأخير //ptr2 سيقوم بالإشارة إلى العنصر الوسط ptr1 = ptr1.next; if(ptr1.next != null) { ptr1 = ptr1.next; ptr2 = ptr2.next; } }
في هذا المكان، لدينا متغيران ptr1 وptr2. نستخدم هذه المتغيرات لتدوير قائمة المتصلة.
في كل تدوير، سيزور ptr1 عقدتين، بينما سيزور ptr2 عقدة واحدة من قائمة المتصلة.
الآن، عندما يصل ptr1 إلى نهاية قائمة المتصلة، سيكون ptr2 في الوسط. بهذا، يمكننا الحصول على موقع العنصر الوسط في مرة واحدة من التدوير.
import java.util.LinkedList; class Main { public static void main(String[] args){ //استخدام LinkedList class لإنشاء قائمة متصلة LinkedList<String> animals = new LinkedList<>(); //إضافة العناصر إلى LinkedList animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("LinkedList: " + animals); //الوصول إلى العنصر الموجود في منتصف الموقع String middle = animals.get(animals.size() / 2); System.out.println("العنصر الموجود في منتصف الموقع: " + middle); } }
نتائج الإخراج
LinkedList: [Cat, Dog, Horse] العنصر الموجود في منتصف الموقع: Dog
في هذا المثال، استخدمنا فئة LinkedList لتحقيق بنية البيانات قائمة بالروابط. لاحظ العبارة
animals.get(animals.size() / 2)
size() / 2 - العودة إلى موقع العنصر الموجود في منتصف الموقع
get() - العودة إلى العنصر الموجود في منتصف الموقع