الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة - شغل مخك (34)

مغلق
بدأه هاني الأتاسي في 12 أكتوبر 2005 · 8 رد · 1,640 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كمان خلينا في ال Linked list....

ماهي أفضل طريقة لإيجاد العقدة رقم n من الأخير في لائحة مترابطة ذو اتجاه واحد single linked list ..

مثلا إذا كان لدينا اللائحة التالية:

1->2->3->4->5->6->7

إذا كانت n = 0 نرجع 7

إذا كانت n = 1 نرجع 6

إذا كانت n = 10 نرجع NULL

تعريف التابع الذي أريد كتابة كود له هو:

Node* GetNthNodeFromEnd(Node* head, int n);

Coding on the Cloud and for the Cloud!

My Blog

#2

كلما تمر على عنصر اعمل له push على الـ stack (ولا يهم هنا اذا كان هذا الستاك هو ستاك الذاكرة ام شي من STL)

بعدين اعمل Pop مرات و عددها n

بعدين اعمل pop الى متغير و ليكن p, هنا p ستكون هي المؤشر المطلوب.

اذا كان الواحد سيستخدم ستاك الذاكرة, فاعتقد ايضا من الافضل ان تقوم قبل العملية بتخزين الـ stack pointer في مكان ما, من اجل ارجاعه الى وضعه بعد الانتهاء من العملية.

#3

نأخد مؤشرين واحد على الرأس و الآخر يبعد n عقدة عنه ثم نمر على كل العناصر و في كل مرة نزيح المؤشرين

عندما يصل الموشر الثاني إلى النهاية يكون الأول في المكان الطلوب.

#4
x=head;
count=0;
while(x!=null AND count !=n){
x=x.next;
count++;
}
if(x==null)
return x;
else{
y=head;

while(x!=null){
y=y.next;
x=x.next;
}
return y;

نفس فكرة ib_doom ولكنه سبقنى بطرح الحل...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

ib_doom طريقتك صحيحة وهي أفضل طريقة وشكرا أحمد لكتابتك المكود :)

هل من أحد يتبرع بحلها عن طريق التعاودية ؟؟

Coding on the Cloud and for the Cloud!

My Blog

#6

ما أحد تبرع راح أحط الحل بالطريقة التعاودية .. طبعا الطريقة الأولى افضل:

Node* FindNthFromLastHelper(Node *node, int* n)
{
   if (!node)
      return NULL;
   else
   {
      Node* p = FindNthFromLastHelper(node->_next, n);
      if (!p) {
         *n -= 1;
         if (*n == 0)
            return node;
      }
      return p;
   }
}

Node* FindNthFromLast(Node *head, int n)
{
   if (n <= 0) return NULL;
   if (head == NULL) return NULL;

   return FindNthFromLastHelper(head, &n);
}

Coding on the Cloud and for the Cloud!

My Blog

#7

منين جبتولنا كلمة "التعاودية"؟ هل تعني recursive؟

#8

انا كمان ما فهمت الكلمة عشان كدا فضلت ساكت لغاية ما اشوف الحل وافهم الكلمة يا حسن

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#9

ههههه طيب كنت سئلت :D .. أنا زمان هيك درست الكلمة بسورية ..

Coding on the Cloud and for the Cloud!

My Blog

هذا الموضوع مغلق.

مواضيع مشابهة