logo

عقدة قائمة جافا

في Java، تعد ListNode بنية بيانات مهمة تستخدم لتنفيذ القوائم المرتبطة بكفاءة. القوائم المرتبطة هي هياكل بيانات ديناميكية تتكون من عقد، حيث تحتوي كل عقدة على قيمة ومرجع إلى العقدة التالية في القائمة. تهدف هذه المقالة إلى تقديم نظرة شاملة عن ListNode في Java، مع تغطية ميزاتها وفوائدها وكيفية استخدامها بشكل فعال.

ما هو ListNode؟

يمثل ListNode عقدة واحدة في قائمة مرتبطة. يحتوي عادةً على مكونين رئيسيين: القيمة أو البيانات المخزنة في العقدة ومرجع (أو رابط) للعقدة التالية في القائمة. ومن خلال ربط هذه العقد، يمكننا إنشاء بنية بيانات مرنة وفعالة قادرة على التعامل مع العمليات المختلفة.

تحديد ListNode في Java:

في Java، عادةً ما يتم تنفيذ ListNode كفئة تحتوي على متغيرين للمثيل: حقل بيانات لتخزين القيمة وحقل تالي للإشارة إلى العقدة التالية. فيما يلي مثال لفئة ListNode البسيطة:

 public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } } 

العمل مع ListNode:

    إنشاء قائمة مرتبطة:

لإنشاء قائمة مرتبطة، نقوم بإنشاء كائن ListNode لكل عقدة وإنشاء الاتصالات بينهما. هنا مثال:

 ListNode node1 = new ListNode(10); ListNode node2 = new ListNode(20); ListNode node3 = new ListNode(30); node1.next = node2; node2.next = node3; 
    اجتياز قائمة مرتبطة:

للتكرار على قائمة مرتبطة، نبدأ من العقدة الرئيسية (العقدة الأولى في القائمة) ونتبع المراجع التالية حتى نصل إلى النهاية (حيث يكون المرجع التالي خاليًا). فيما يلي مثال لاجتياز القائمة أعلاه:

 ListNode current = node1; while (current != null) { System.out.println(current.val); current = current.next; } 
    إضافة وإزالة العقد:

يسمح لنا ListNode بإضافة وإزالة العقد في مواضع مختلفة في القائمة المرتبطة. ومن خلال ضبط المراجع التالية، يمكننا إدراج العقد أو حذفها بكفاءة. تعتبر هذه العمليات مفيدة لهياكل البيانات الديناميكية التي تتطلب تعديلات متكررة.

عمليات إضافية:

يدعم ListNode عمليات أخرى مثل البحث عن قيمة محددة، والعثور على طول القائمة المرتبطة، وإجراء عمليات معالجة مختلفة في القائمة، مثل العكس أو الفرز.

مزايا ListNode وLinkedLists:

    الحجم الديناميكي:يمكن أن تنمو القوائم المرتبطة أو تتقلص ديناميكيًا عند إضافة العناصر أو إزالتها، على عكس المصفوفات ذات الحجم الثابت.عمليات الإدراج والحذف الفعالة:يسمح ListNode بعمليات الإدراج والحذف الفعالة في أي موضع في القائمة، مما يوفر المرونة في إدارة البيانات.كفاءة الذاكرة:تقوم القوائم المرتبطة بتخصيص الذاكرة ديناميكيًا، باستخدام المقدار الضروري فقط لكل عقدة، مما يجعلها مناسبة لمجموعات البيانات الكبيرة أو المتنوعة.براعه:يمكن ربط القوائم المرتبطة بشكل منفرد (كل عقدة تشير إلى العقدة التالية) أو ربطها بشكل مزدوج (كل عقدة تشير إلى العقدة التالية والسابقة)، مما يوفر مقايضات مختلفة بين استخدام الذاكرة ووظيفتها.

توفر بنية بيانات ListNode في Java أساسًا قويًا لتنفيذ القوائم المرتبطة. من خلال استخدام ListNode والعمليات المرتبطة به، يمكن للمطورين التعامل بكفاءة مع البيانات الديناميكية وإجراء عمليات معالجة معقدة وبناء هياكل بيانات متعددة الاستخدامات. سيؤدي فهم مفهوم ListNode وإتقانه إلى تعزيز قدرتك على حل المشكلات وتصميم خوارزميات فعالة في برمجة Java بشكل كبير.

فيما يلي مثال لبرنامج Java يوضح بنية بيانات ListNode وينفذ العمليات الأساسية على قائمة مرتبطة:

هاشت مقابل هاشماب

LinkedListExample.java

 class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } } public class LinkedListExample { public static void main(String[] args) { // Creating a linked list: 10 -> 20 -> 30 ListNode node1 = new ListNode(10); ListNode node2 = new ListNode(20); ListNode node3 = new ListNode(30); node1.next = node2; node2.next = node3; // Traversing the linked list and printing the values System.out.println('Linked List:'); ListNode current = node1; while (current != null) { System.out.println(current.val); current = current.next; } // Output: 10 20 30 // Adding a new node: 15 -> 20 -> 30 ListNode newNode = new ListNode(15); newNode.next = node2; node1.next = newNode; // Traversing the updated linked list System.out.println('Updated Linked List:'); current = node1; while (current != null) { System.out.println(current.val); current = current.next; } // Output: 10 15 20 30 // Removing a node: 10 -> 15 -> 30 node1.next = newNode.next; // Traversing the modified linked list System.out.println('Modified Linked List:'); current = node1; while (current != null) { System.out.println(current.val); current = current.next; } // Output: 10 20 30 } } 

انتاج:

 Linked List: 10 20 30 Updated Linked List: 10 15 20 30 Modified Linked List: 10 20 30