يتم إعطاؤك مقتطف التعليمات البرمجية الذي يؤكد نتيجة استدعاء دالة. مهمتك هي كتابة تنفيذ الدالة `num_components(head: ListNode, g: Vec<i32>) -> i32` التي ستعيد عدد المكونات في القائمة المرتبطة.

القائمة المرتبطة هي بنية بيانات حيث يحتوي كل عنصر (عقدة) على قيمة ومرجع إلى العقدة التالية. في هذه المشكلة، نمثل قائمة مرتبطة كسلسلة من العقد. تمثل المعلمة "head" العقدة الأولى في القائمة المرتبطة.

تأخذ الدالة معلمتين:
- `الرأس`: مرجع إلى العقدة الرئيسية للقائمة المرتبطة (كائن عقدة له قيمة وخاصية تالية تشير إلى العقدة التالية).
- `g`: متجه للأعداد الصحيحة التي تمثل مجموعة فرعية من القيم التي تعتبر متصلة في القائمة المرتبطة.

تعتبر العقدتان متصلتين إذا كانت قيمتهما موجودة في المتجه `g`. المكون عبارة عن مجموعة فرعية من العقد المرتبطة ببعضها البعض.

مهمتك هي تنفيذ الدالة `num_components` التي تُرجع عدد المكونات في القائمة المرتبطة.
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}