Jadual Kandungan
Kaedah Biasa
Contoh
Output
#🎜 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.
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.
Rumah pembangunan bahagian belakang C++ Balikkan senarai berganda menggunakan C++

Balikkan senarai berganda menggunakan C++

Aug 30, 2023 pm 11:41 PM
c bahasa Senarai terpaut terbalik senarai berganda

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}
Salin selepas log masuk

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;
}
Salin selepas log masuk

Output

Before
9 8 4 6
After
6 4 8 9
Salin selepas log masuk
Salin selepas log masuk

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

Before
9 8 4 6
After
6 4 8 9
Salin selepas log masuk
Salin selepas log masuk
Penjelasan 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.

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penggunaan typedef struct dalam bahasa c Penggunaan typedef struct dalam bahasa c May 09, 2024 am 10:15 AM

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.

Apakah maksud sebenar dalam bahasa c Apakah maksud sebenar dalam bahasa c May 09, 2024 pm 12:06 PM

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].

Cara menggunakan restrict dalam bahasa c Cara menggunakan restrict dalam bahasa c May 08, 2024 pm 01:30 PM

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.

_penggunaan kompleks dalam bahasa c _penggunaan kompleks dalam bahasa c May 08, 2024 pm 01:27 PM

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.

Bagaimana untuk melaksanakan fungsi kuasa dalam bahasa C Bagaimana untuk melaksanakan fungsi kuasa dalam bahasa C May 09, 2024 pm 11:33 PM

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.

Apa yang perlu dilakukan jika terdapat ralat dalam scanf dalam bahasa C Apa yang perlu dilakukan jika terdapat ralat dalam scanf dalam bahasa C May 09, 2024 am 11:39 AM

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.

_Apakah maksud bool dalam bahasa c? _Apakah maksud bool dalam bahasa c? May 08, 2024 pm 01:33 PM

_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.

Apakah maksud reg dalam bahasa c Apakah maksud reg dalam bahasa c May 09, 2024 am 09:57 AM

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.

See all articles