কম্পিউটার টিউটোরিয়াল

সি প্রোগ্রামিং-এ লিংকড লিস্টের শেষ থেকে k নোড রিভার্স অর্ডারে প্রিন্ট করা (ইটারেটিভ)


লিংকড লিস্টের শেষ থেকে k সংখ্যক নোড রিভার্স অর্ডারে প্রিন্ট করতে হবে ইটারেটিভ (iterative) পদ্ধতিতে।

ইটারেটিভ মেথড হলো লুপ ব্যবহার করে শর্ত সত্য থাকা পর্যন্ত এক্সিকিউট করা।

উদাহরণ

Linked List: 29->34->43->56->88
Input: k = 2
Output: 56 88

সি প্রোগ্রামিং-এ লিংকড লিস্টের শেষ থেকে k নোড রিভার্স অর্ডারে প্রিন্ট করা (ইটারেটিভ)

অ্যাপ্রোচ: স্ট্যাক (stack) ডেটা স্ট্রাকচার ব্যবহার করা হয়। লিস্টের এলিমেন্টগুলো স্ট্যাকে পুশ করলে স্ট্যাকের টপে লিস্টের লাস্ট এলিমেন্টগুলো থাকে। সেটা থেকে k বার পপ করে প্রিন্ট করলে শেষ থেকে k নোড রিভার্স অর্ডারে পাওয়া যায়।

অ্যালগরিদম

START
Step 1: Create node structure
Step 2: Function intoList(int data) to create node
Step 3: Function rev(node* head, int count, int k)
    temp1 = head; while(temp1 != NULL) count++, temp1 = temp1->next
    int array[count], temp2 = count
    temp1 = head; while(temp1 != NULL) array[--temp2] = temp1->data, temp1 = temp1->next
    for i = 0 to k-1: Print array[i]
Step 4: In main() create list, set k=3, count=0, call rev(head, count, k)
STOP

সি প্রোগ্রাম

#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node *next;
};

struct node* intoList(int data) {
    struct node* newnode = (struct node*)malloc(sizeof(struct node));
    newnode->data = data;
    newnode->next = NULL;
    return newnode;
}

void rev(struct node* head, int count, int k) {
    struct node* temp1 = head;
    while (temp1 != NULL) { count++; temp1 = temp1->next; }
    int array[count], temp2 = count, i;
    temp1 = head;
    while (temp1 != NULL) { array[--temp2] = temp1->data; temp1 = temp1->next; }
    for (i = 0; i < k; i++) printf("%d ", array[i]);
}

int main() {
    printf("\nreverse of a list is: ");
    struct node* head = intoList(9);
    head->next = intoList(76);
    head->next->next = intoList(13);
    head->next->next->next = intoList(24);
    head->next->next->next->next = intoList(55);
    head->next->next->next->next->next = intoList(109);
    int k = 3, count = 0;
    rev(head, count, k);
    return 0;
}

আউটপুট

reverse of a list is: 109 55 24

  1. সি প্রোগ্রামিং-এ লিংকড লিস্টের শেষ থেকে k নোড রিভার্স অর্ডারে প্রিন্ট করা (রিকার্সিভ)

  2. সি প্রোগ্রামিং-এ লিংকড লিস্টের বিকল্প নোড প্রিন্ট করা (ইটারেটিভ মেথড)

  3. সি প্রোগ্রামিং-এ লিংকড লিস্ট রিভার্স না করে রিভার্স অর্ডারে প্রিন্ট করা

  4. সি++-এ সার্কুলার লিংকড লিস্টের নোডগুলোর যোগফল (Sum)