ڳن Linkedيل فهرستن جا عنصر ليٽ ڪوڊ حل  


تڪليف جي سطح آسان
بار بار پڇڻ ۾ ايڊوب Amazon ايپل Bloomberg گاديء جو هڪ ڪريو گوگل Microsoft جي
algorithms ڪوڊنگ انٽرويو انٽرويو جي تياري ليٽ ڪوڊ LeetCodeSolutions ڳن -يل فهرست صاف اسٽوريج

مسئلي جو بيان  

ھن مسئلي ۾ ، اسان کي ھڪڙي ڳن givenيو وڃي ٿو فهرست ان جي نوڊس سان انمول قدر موجود آهن. اسان کي فهرست مان ڪجھ نوڊس کي ختم ڪرڻ جي ضرورت آھي جنھن جي قيمت برابر آھي ويلو. مسئلو حل ٿيڻ جي ضرورت نه آهي جڳھ تي پر اسان هڪ اهڙي طريقي تي بحث ڪنداسين.

مثال

List = 1 -> 2 -> 2 -> 3 -> 4 , val = 2
1 3 4
List = 2 -> 2 -> 2 -> 2 , val = 2
Empty List

ڳن Linkedيل فهرستن جا عنصر ليٽ ڪوڊ حل  

رستو (ٻيهر ورجائي)  

اسان ضروري طور تي گھربل طور واري لسٽ کي گهربل لسٽ کي واپس ڏيڻ لاءِ ساڳيو فن لڳائي سگھون ٿا. اسان انهي شرط سان ڪجهه ڏنل شرطن سان ڏنل فهرست جي هيٺين لاڙن تي فون ڪندي حاصل ڪندا آهيون. تنهن هوندي ، اسان کي بنيادي ڪيس کي سنڀالڻ جي ضرورت آهي جڏهن فهرست خالي ٿي وڃي. هتي صرف هڪ خاص ڪيس آهي.

جيڪڏهن فهرستن جي سربراهه جي برابر قيمت آهي والو (ان پٽ) ، ان کان پوء ، اسان کي ان جي ايندڙ نوڊ تي سڏيندڙ فنڪشن واپس ڪرڻ جي ضرورت آهي. اهو موجوده نوڊ کان بچڻ لاءِ ڇا ڪيو ويو آهي فهرست جي پوئين نوڊس ۾ شامل ڪئي وئي آهي (جيئن فنڪشن اسٽڪ مڪمل ٿي وئي آهي).

ختم ٿيل لنڪ لسٽ عناصر تي عمل درآمد ليٽ ڪوڊ حل

سي ++ پروگرام

#include <bits/stdc++.h>

using namespace std;

struct listNode
{
    int value;
    listNode* next;
    listNode(int x)
    {
        value = x;
        next = NULL;
    }
};

void print(listNode* head)
{
    if(head == NULL) {
        cout << "Empty List\n";
        return;
    }
    while(head)
    {
        cout << head->value << " ";
        head = head->next;
    }
    cout << '\n';
    return;
}

listNode* removeElements(listNode* head, int val) {
    if(head == NULL) {
        return head;
    }
    if(head->value == val) {
        listNode* temp = head->next;
        head->next = NULL;
        delete(head);
        return removeElements(temp , val);
    }

    head->next = removeElements(head->next , val);
    return head;
}

int main() {
    listNode* head = new listNode(1);
    head->next = new listNode(2);
    head->next->next = new listNode(2);
    head->next->next->next = new listNode(3);
    head->next->next->next->next = new listNode(4);

    int val = 2;
    print(removeElements(head , val));
    return 0;
}

جاوا پروگرام

class listNode
{
    int value;
    listNode next;
    listNode(int x)
    {
        value = x;
        next = null;
    }
};

class remove_linked_list_elements {
    public static void print(listNode head) {
        if(head == null) {
            System.out.println("Empty List");
            return;
        }
        while(head != null)
        {
            System.out.print(head.value + " ");
            head = head.next;
        }
        System.out.println();
        return;
    }

    public static listNode removeElements(listNode head, int val) {
        if(head == null) {
            return head;
        }
        if(head.value == val) {
            return removeElements(head.next , val);
        }

        head.next = removeElements(head.next , val);
        return head;
    }

    public static void main(String args[]) {
        listNode head = new listNode(1);
        head.next = new listNode(2);
        head.next.next = new listNode(2);
        head.next.next.next = new listNode(3);
        head.next.next.next.next = new listNode(4);

        int val = 2;
        print(removeElements(head , val));
    }
}
1 3 4

نمبر پوري ڪندڙ ليٽ ڪوڊ حل جي پيچيدگي تجزيو

وقت جي پيچيدگي

اي (اين)، جتي N = فهرست جي ڊيگهه. اسان بدترين حالتن ۾ صرف هڪ ڀيرو هڪ عنصر جو دورو ڪيو.

پڻ ڏسو
ٻوڏ ڀريو ليٽ ڪوڊ

خلائي پيچيدگي 

اي (1). جيئن ڪوڊ پٺيان اچي ٿو پڇو ڳائڻ.

رستو (ٻيهر ورجائي)  

ڪنھن به نوڊ کي حذف ڪرڻ لاءِ ، اسان کي ان جي پوئين نوڊ جو پتو لڳائڻو پوندو ، انھيءَ ڪري ته اسان اڳوڻي پوائنٽ کي ايندڙ جوڙي ڪري سگھون. هي هڪ خيال برقرار رکڻ لاءِ خيال ڏيندو آهي نظارو پوائنٽر جيڪو اسان کي لسٽ ۾ اشارو ڏيکارڻ ۾ مدد ڏيندو. هاڻي ، اهم نڪتو اهو آهي ته فهرست ۾ پهرين نوڊ جو ڪو به اڳئين نوڊ ناهي. تنهن ڪري ، اسان کي فهرست جي شروعات ۾ هڪ موڪليوinode نوڊ شامل ڪرڻ جي ضرورت آهي. ھاڻي ، اسان لسٽ ۾ پھرين نوڊ ذريعي لنگھي سگھون ٿا (سينڊل نوڊ کان اڳتي نوڊ) ۽ ھيٺيان ٻنھي حالتن کي منهن ڏيڻو پوندو.

1.) نوڊ-> ويل == ويل: انهي حالت ۾ ، اسان سيٽ ڪنداسين اڳ-> اڳيون = نوڊ-> اڳيون. اهو موجوده نوڊ جي پوئين نوڊ کي موجوده نوڊ جي ويجهڙائي سان ڳن willيندو ، ۽ موجوده نوڊ کي استعمال ڪندي استعمال ڪندي. ختم ڪريو (currentNode)

2.) ٻي صورت ۾ ، اسان صرف مقرر ڪيو اڳوڻي = سر ايندڙ نوڊس لاءِ.

آخر ۾ ، موڪليل شين جي ايندڙ گهربل فهرست آهي.

ختم ٿيل لنڪ لسٽ عناصر تي عمل درآمد ليٽ ڪوڊ حل

سي ++ پروگرام

#include <bits/stdc++.h>

using namespace std;

struct listNode
{
    int value;
    listNode* next;
    listNode(int x)
    {
        value = x;
        next = NULL;
    }
};

void print(listNode* head)
{
    if(head == NULL) {
        cout << "Empty List\n";
        return;
    }
    while(head)
    {
        cout << head->value << " ";
        head = head->next;
    }
    cout << '\n';
    return;
}

listNode* removeElements(listNode* head, int val) {
    listNode *dummy = new listNode(-1) , *prev = dummy , *toDelete;
    dummy->next = head;

    while(head != NULL) {
        if(head->value == val) {
            toDelete = head;
            prev->next = head->next;
            head = head->next;
            toDelete->next = NULL;
        }
        else {
            toDelete = NULL;
            prev = head;
            head = head->next;
        }
        if(toDelete != NULL)
            delete(toDelete);
    }

    return dummy->next;
}

int main() {
    listNode* head = new listNode(1);
    head->next = new listNode(2);
    head->next->next = new listNode(2);
    head->next->next->next = new listNode(3);
    head->next->next->next->next = new listNode(4);

    int val = 2;
    print(removeElements(head , val));
    return 0;
}

جاوا پروگرام

class listNode
{
    int value;
    listNode next;
    listNode(int x)
    {
        value = x;
        next = null;
    }
};

class remove_linked_list_elements {
    public static void print(listNode head) {
        if(head == null) {
            System.out.println("Empty List");
        return;
        }
        while(head != null)
        {
            System.out.print(head.value + " ");
            head = head.next;
        }
        System.out.println();
        return;
    }

    public static listNode removeElements(listNode head, int val) {
        listNode dummy = new listNode(-1) , prev = dummy , toDelete;
        dummy.next = head;

        while(head != null) {
            if(head.value == val) {
                prev.next = head.next;
            }
            else {
                prev = head;
            }
            head = head.next;
        }

        return dummy.next;
    }

    public static void main(String args[]) {
        listNode head = new listNode(1);
        head.next = new listNode(2);
        head.next.next = new listNode(2);
        head.next.next.next = new listNode(3);
        head.next.next.next.next = new listNode(4);

        int val = 2;
        print(removeElements(head , val));
    }
}
1 3 4

ختم ٿيل لنڪ فهرست عناصر ليٽ ڪوڊ حل جو پيچيدگي تجزيو

وقت جي پيچيدگي

اي (اين)جئين اسان هڪ ڀيرو پوري لسٽ کي ٻيهر هلايون ٿا. N = فهرست جي ڊيگهه

پڻ ڏسو
ميٽ ترتيب واريو ارٽ ليٽ ڪوڊ حل

خلائي پيچيدگي 

اي (1)، جيئن اسان وٽ رڳو يادگيريءَ جي جڳهه.