• 0
هاني الأتاسي

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

سؤال

كمان خلينا في ال 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);

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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 ولكنه سبقنى بطرح الحل...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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);
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .