"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > عكس قائمة مرتبطة في الذهاب

عكس قائمة مرتبطة في الذهاب

تم النشر بتاريخ 2024-07-31
تصفح:890

Reverse a linked list in go

هذا هو السؤال المفضل الذي يجب طرحه للمطورين الجدد. بسيط جدًا إذا كان لديك فئة هياكل بيانات جيدة.

عكس قائمة مرتبطة واحدة. (هذا هو Leetcode 206)

بالنسبة للتنفيذ، اخترت أن أجعل القائمة المرتبطة نوعًا عامًا.

type Node[T any] struct {
    Data T
    Next *Node[T]
}

type LinkedList[T any] struct {
    Head *Node[T]
}

func (ll *LinkedList[T]) Append(data T) {
    newNode := &Node[T]{Data: data, Next: nil}

    if ll.Head == nil {
        ll.Head = newNode
        return
    }

    current := ll.Head
    for current.Next != nil {
        current = current.Next
    }
    current.Next = newNode
}

وبالنسبة للوظيفة العكسية، يتم ذلك بتمرير واحد من خلال إدراك أن كل ما يتعين علينا القيام به هو الحفاظ على مؤشر للعقدة السابقة، ثم تعيين "التالى" للعقدة المحددة إلى العقدة السابقة.

عندما نصل إلى النهاية، نعلم أن العقدة الحالية هي "الرأس" الجديد للقائمة.

func (ll *LinkedList[T]) ReverseLinkedList() {
    var prev *Node[T] = nil
    var ptr *Node[T] = ll.Head
    for ptr != nil {
        var next *Node[T] = ptr.Next
        ptr.Next = prev
        prev = ptr
        if next == nil {
            ll.Head = ptr
        }
        ptr = next
    }
}

هل فاتنا شرط حدودي؟ ما هي المضاعفات التي تتم إضافتها إذا أصبحت القائمة الآن قائمة مرتبطة بشكل مزدوج؟ اسمحوا لي أن نعرف في التعليقات.

شكرًا!

يمكن العثور على رمز هذه المشاركة وجميع المشاركات في هذه السلسلة هنا

بيان الافراج تم نشر هذه المقالة على: https://dev.to/johnscode/reverse-a-linked-list-in-go-583i?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3