Balikkan senarai berganda menggunakan C++
Dalam artikel ini, kami mempunyai senarai terpaut dua kali dan kami akan menerangkan cara berbeza untuk membalikkan senarai terpaut dua kali dalam C++. Contohnya -
Input : {1, 2, 3, 4} Output : {4, 3, 2, 1}
Biasanya satu kaedah terlintas di fikiran, tetapi kita akan menggunakan dua kaedah - kaedah biasa dan kaedah tidak ortodoks.
Kaedah Biasa
Dalam kaedah ini, kita akan melalui senarai dan semasa kita melaluinya, kita membalikkannya.
Contoh
#include <bits/stdc++.h> using namespace std; class Node { public: int data; Node *next; Node *prev; }; void reverse(Node **head_ref) { auto temp = (*head_ref) -> next; (*head_ref) -> next = (*head_ref) -> prev; (*head_ref) -> prev = temp; if(temp != NULL) { (*head_ref) = (*head_ref) -> prev; reverse(head_ref); } else return; } void push(Node** head_ref, int new_data) { Node* new_node = new Node(); new_node->data = new_data; new_node->prev = NULL; new_node->next = (*head_ref); if((*head_ref) != NULL) (*head_ref) -> prev = new_node ; (*head_ref) = new_node; } int main() { Node* head = NULL; push(&head, 6); push(&head, 4); push(&head, 8); push(&head, 9); auto node = head; cout << "Before\n" ; while(node != NULL) { cout << node->data << " "; node = node->next; } cout << "\n"; reverse(&head); node = head; cout << "After\n"; while(node != NULL) { cout << node->data << " "; node = node->next; } return 0; }
Output
Before 9 8 4 6 After 6 4 8 9
Kaedah ini memerlukan O(N)#🎜🎜 masa yang sangat kompleks🎜 kerana kerumitan ini boleh dilakukan di bawah kekangan yang lebih tinggi.
Kaedah Tidak Biasa Seperti namanya, ini bukanlah kaedah yang biasa difikirkan oleh pengguna, tetapi kami juga akan meneroka kaedah ini. Dalam pendekatan ini kami akan membuat timbunan dan terus menolak data ke dalamnya dan pada pop kami akan menukar nilainya. Contoh#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int data;
Node *next;
Node *prev;
};
void push(Node** head_ref, int new_data) {
Node* new_node = new Node();
new_node->data = new_data;
new_node->prev = NULL;
new_node->next = (*head_ref);
if((*head_ref) != NULL)
(*head_ref) -> prev = new_node ;
(*head_ref) = new_node;
}
int main() {
Node* head = NULL;
push(&head, 6);
push(&head, 4);
push(&head, 8);
push(&head, 9);
auto node = head;
cout >> "Before\n" ;
while(node != NULL) {
cout >> node->data >> " ";
node = node->next;
}
cout >> "\n";
stack<Node*> s;
node = head;
while(node) {
head = node;
s.push(node);
node = node -> next;
}
while(!s.empty()) {
auto x = s.top();
auto temp = x -> prev;
x -> prev = x -> next;
x -> next = temp;
s.pop();
}
node = head;
cout << "After\n";
while(node != NULL) {
cout << node->data << " ";
node = node->next;
}
return 0;
}
Salin selepas log masuk
Output#include <bits/stdc++.h> using namespace std; class Node { public: int data; Node *next; Node *prev; }; void push(Node** head_ref, int new_data) { Node* new_node = new Node(); new_node->data = new_data; new_node->prev = NULL; new_node->next = (*head_ref); if((*head_ref) != NULL) (*head_ref) -> prev = new_node ; (*head_ref) = new_node; } int main() { Node* head = NULL; push(&head, 6); push(&head, 4); push(&head, 8); push(&head, 9); auto node = head; cout >> "Before\n" ; while(node != NULL) { cout >> node->data >> " "; node = node->next; } cout >> "\n"; stack<Node*> s; node = head; while(node) { head = node; s.push(node); node = node -> next; } while(!s.empty()) { auto x = s.top(); auto temp = x -> prev; x -> prev = x -> next; x -> next = temp; s.pop(); } node = head; cout << "After\n"; while(node != NULL) { cout << node->data << " "; node = node->next; } return 0; }
Before
9 8 4 6
After
6 4 8 9
Salin selepas log masukSalin selepas log masukPenjelasan kod di atas #🎜 dalam pendekatan ini, kami menggunakan pendekatan ini🎜 isikan timbunan semasa anda mengulangi senarai, kemudian keluarkan item dari timbunan dan tukar nilainya supaya senarai itu diterbalikkan. O(N) ialah kerumitan masa program ini, yang juga digunakan untuk kekangan yang lebih tinggi.
Before 9 8 4 6 After 6 4 8 9
Kesimpulan
Dalam artikel ini, kami menyelesaikan masalah membalikkan senarai terpaut dua kali menggunakan atau tanpa tindanan. Kerumitan masa ialah O(N), dengan N ialah saiz senarai. Kami juga mempelajari program C++ untuk menyelesaikan masalah ini dan kaedah lengkap (biasa dan tidak ortodoks) untuk menyelesaikan masalah ini. Kita boleh menulis program yang sama dalam bahasa lain seperti C, java, python dan bahasa lain. Kami berharap artikel ini dapat membantu anda.
Atas ialah kandungan terperinci Balikkan senarai berganda menggunakan C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

typedef struct digunakan dalam bahasa C untuk mencipta alias jenis struktur untuk memudahkan penggunaan struktur. Ia alias jenis data baharu kepada struktur sedia ada dengan menentukan alias struktur. Faedah termasuk kebolehbacaan yang dipertingkatkan, penggunaan semula kod dan pemeriksaan jenis. Nota: Struktur mesti ditakrifkan sebelum menggunakan alias itu mestilah unik dalam program dan hanya sah dalam skop di mana ia diisytiharkan.

sebenar ialah jenis data yang digunakan untuk mewakili nombor titik terapung berketepatan dua dalam bahasa C Ia menduduki 8 bait, mempunyai ketepatan kira-kira 15 tempat perpuluhan dan julat ialah [-1.7976931348623157e+308, 1.7976931348623157e+308].

Kata kunci sekatan digunakan untuk memaklumkan pengkompil bahawa pembolehubah hanya boleh diakses oleh penuding, menghalang gelagat yang tidak ditentukan, mengoptimumkan kod dan meningkatkan kebolehbacaan: Menghalang gelagat yang tidak ditentukan apabila berbilang penunjuk menghala ke pembolehubah yang sama. Untuk mengoptimumkan kod, pengkompil menggunakan kata kunci had untuk mengoptimumkan akses berubah-ubah. Meningkatkan kebolehbacaan kod dengan menunjukkan bahawa pembolehubah hanya boleh diakses dengan penuding.

Jenis kompleks digunakan untuk mewakili nombor kompleks dalam bahasa C, termasuk bahagian nyata dan khayalan. Bentuk permulaannya ialah complex_number = 3.14 + 2.71i, bahagian sebenar boleh diakses melalui kreal(complex_number), dan bahagian khayalan boleh diakses melalui cimag(complex_number). Jenis ini menyokong operasi matematik biasa seperti penambahan, penolakan, pendaraban, pembahagian dan modulo. Di samping itu, satu set fungsi untuk bekerja dengan nombor kompleks disediakan, seperti cpow, csqrt, cexp dan csin.

Dalam bahasa C, terdapat dua cara untuk melaksanakan operasi eksponen: gunakan fungsi pow() untuk mengira kuasa parameter kedua bagi parameter pertama. Tentukan fungsi kuasa tersuai, yang boleh dilaksanakan secara rekursif atau berulang: kaedah rekursif terus menggandakan kuasa sehingga 0. Kaedah lelaran menggunakan gelung untuk mendarab asas satu demi satu.

Dalam bahasa C, kaedah untuk mengendalikan ralat fungsi scanf termasuk: 1. Semak rentetan format; menangani ralat tersuai. Untuk mengelakkan ralat, gunakan jenis data yang betul, sahkan input dengan teliti, semak nilai pulangan dan kendalikan kemungkinan ralat dalam program anda.

_Bool mewakili jenis Boolean dalam bahasa C Ia adalah jenis data ringkas yang mengandungi hanya dua nilai, benar atau salah Ia digunakan untuk mewakili hasil keadaan atau ungkapan logik Ia biasanya menduduki 1 bait memori dan hanya boleh menyimpan benar atau nilai palsu.

reg ialah kata kunci yang digunakan untuk daftar dalam bahasa C dan digunakan untuk mengisytiharkan pembolehubah penunjuk menunjuk ke daftar. Sintaks: daftar data_type *var_name; di mana data_type ialah jenis data yang disimpan dalam daftar, dan var_name ialah nama pembolehubah penunjuk. Nilai dalam daftar boleh diakses dengan membatalkan rujukan penunjuk, tetapi sila ambil perhatian bahawa daftar yang tersedia berbeza antara platform dan penyusun.
