Computer >> Máy Tính >  >> Lập trình >> C ++

Các phần tử hoán đổi theo cặp trong C ++ của một danh sách được liên kết nhất định

Để giải quyết một vấn đề trong đó chúng tôi bắt buộc phải hoán đổi các nút theo cặp có trong danh sách được liên kết và sau đó in nó ra, chẳng hạn như

Input : 1->2->3->4->5->6->NULL

Output : 2->1->4->3->6->5->NULL

Input : 1->2->3->4->5->NULL

Output : 2->1->4->3->5->NULL

Input : 1->NULL

Output : 1->NULL

Có hai cách để tiếp cận giải pháp cả hai đều có độ phức tạp về thời gian là O (N), trong đó N là kích thước của danh sách liên kết đã cung cấp của chúng tôi, vì vậy bây giờ chúng ta sẽ khám phá cả hai cách tiếp cận

Phương pháp tiếp cận lặp lại

Chúng tôi sẽ lặp qua các phần tử danh sách được liên kết trong cách tiếp cận này và hoán đổi từng cặp cho đến khi chúng đạt đến NULL.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Node { // node of our list
public:
    int data;
    Node* next;
};
void swapPairwise(Node* head){
    Node* temp = head;
    while (temp != NULL && temp->next != NULL) { // for pairwise swap we need to have 2 nodes hence we are checking
        swap(temp->data,
            temp->next->data); // swapping the data
        temp = temp->next->next; // going to the next pair
    }
}
void push(Node** head_ref, int new_data){ // function to push our data in list
    Node* new_node = new Node(); // creating new node
    new_node->data = new_data;
    new_node->next = (*head_ref); // head is pushed inwards
    (*head_ref) = new_node; // our new node becomes our head
}
void printList(Node* node){ // utility function to print the given linked list
    while (node != NULL) {
       cout << node->data << " ";
       node = node->next;
    }
}
int main(){
    Node* head = NULL;
    push(&head, 5);
    push(&head, 4);
    push(&head, 3);
    push(&head, 2);
    push(&head, 1);
    cout << "Linked list before\n";
    printList(head);
    swapPairwise(head);
    cout << "\nLinked list after\n";
    printList(head);
    return 0;
}

Đầu ra

Linked list before
1 2 3 4 5
Linked list after
2 1 4 3 5

Chúng tôi sẽ sử dụng cùng một công thức trong cách tiếp cận sau đây, nhưng chúng tôi sẽ lặp lại thông qua đệ quy.

Phương pháp tiếp cận đệ quy

Trong cách tiếp cận này, chúng tôi đang triển khai cùng một logic với đệ quy.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Node { // node of our list
public:
    int data;
    Node* next;
};
void swapPairwise(struct Node* head){
    if (head != NULL && head->next != NULL) { // same condition as our iterative
        swap(head->data, head->next->data); // swapping data
        swapPairwise(head->next->next); // moving to the next pair
    }
    return; // else return
}
void push(Node** head_ref, int new_data){ // function to push our data in list
    Node* new_node = new Node(); // creating new node
    new_node->data = new_data;
    new_node->next = (*head_ref); // head is pushed inwards
    (*head_ref) = new_node; // our new node becomes our head
}
void printList(Node* node){ // utility function to print the given linked list
    while (node != NULL) {
        cout << node->data << " ";
        node = node->next;
    }
}
int main(){
    Node* head = NULL;
    push(&head, 5);
    push(&head, 4);
    push(&head, 3);
    push(&head, 2);
    push(&head, 1);
    cout << "Linked list before\n";
    printList(head);
    swapPairwise(head);
    cout << "\nLinked list after\n";
    printList(head);
    return 0;
}

Đầu ra

Linked list before
1 2 3 4 5
Linked list after
2 1 4 3 5

Giải thích về Quy tắc trên

Trong cách tiếp cận này, chúng tôi duyệt qua danh sách được liên kết của chúng tôi theo từng cặp. Bây giờ, khi chúng tôi tiếp cận một cặp, chúng tôi trao đổi dữ liệu của chúng và chuyển sang cặp tiếp theo và đó là cách chương trình của chúng tôi tiến hành theo cả hai phương pháp.

Kết luận

Trong hướng dẫn này, chúng tôi giải quyết các phần tử hoán đổi theo cặp của một danh sách được liên kết nhất định bằng cách sử dụng đệ quy và lặp lại. Chúng tôi cũng đã học chương trình C ++ cho vấn đề này và cách tiếp cận hoàn chỉnh (Bình thường) mà chúng tôi đã giải quyết vấn đề này. Chúng ta có thể viết cùng một chương trình bằng các ngôn ngữ khác như C, java, python và các ngôn ngữ khác. Chúng tôi hy vọng bạn thấy hướng dẫn này hữu ích.