Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memandangkan senarai terpaut, tukar elemen dalam senarai terpaut secara berpasangan

Memandangkan senarai terpaut, tukar elemen dalam senarai terpaut secara berpasangan

WBOY
WBOYke hadapan
2023-08-26 10:33:101312semak imbas

Memandangkan senarai terpaut, tukar elemen dalam senarai terpaut secara berpasangan

Sebagai contoh, untuk menyelesaikan masalah perlu menukar pasangan nod yang terdapat dalam senarai terpaut dan kemudian mencetaknya

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

Terdapat dua cara untuk mencapai penyelesaian dengan kerumitan masa O(N), di mana N adalah senarai terpaut kami sediakan saiz, jadi sekarang kami akan meneroka kedua-dua kaedah ini

Kaedah iteratif

Dalam kaedah ini, kami akan mengulangi elemen senarai terpaut dan menukarnya berpasangan demi pasangan sehingga mencapai NULL.

Contoh

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

Output

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

Kami akan menggunakan formula yang sama dalam kaedah berikut tetapi kami akan berulang melalui rekursi.

Kaedah Rekursif

Dalam kaedah ini kita melaksanakan logik yang sama melalui rekursi.

Contoh

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

Output

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

Penjelasan kod di atas

Dalam kaedah ini, kami melintasi senarai terpaut secara berpasangan. Sekarang apabila kami mencapai pasangan, kami menukar data mereka dan beralih ke pasangan seterusnya dan ini adalah bagaimana program kami meneruskan dalam kedua-dua kaedah.

Kesimpulan

Dalam tutorial ini, kami menyelesaikan pertukaran berpasangan bagi elemen senarai terpaut yang diberikan menggunakan rekursi dan lelaran. Kami juga mempelajari program C++ untuk masalah ini dan kaedah lengkap (generik) untuk menyelesaikannya. Kita boleh menulis program yang sama dalam bahasa lain seperti C, java, python dan bahasa lain. Kami harap anda mendapati tutorial ini membantu.

Atas ialah kandungan terperinci Memandangkan senarai terpaut, tukar elemen dalam senarai terpaut secara berpasangan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam