Program C untuk membalikkan senarai terpaut
Dalam soalan ini, kami diberi senarai pautan. Tugas kami ialah mencipta program untuk membalikkan senarai terpaut.
Program ini akan membalikkan senarai pautan yang diberikan dan mengembalikan senarai pautan terbalik.
Senarai terpaut ialah urutan terpaut yang mengandungi item. Setiap pautan mengandungi sambungan ke pautan lain.
Contoh
9 -> 32 -> 65 -> 10 -> 85 -> NULL
Senarai terpaut terbalik ialah membuat senarai terpaut dengan menterbalikkan pautan senarai terpaut. Nod kepala senarai terpaut akan menjadi nod terakhir senarai terpaut, dan nod terakhir akan menjadi nod kepala.
Contoh
Senarai terpaut terbalik terbentuk daripada senarai terpaut di atas −
85 -> 10 -> 65 -> 32 -> 9 -> NULL
Untuk membalikkan senarai terpaut yang diberikan, kami akan menggunakan tiga petunjuk tambahan untuk memproses. Penunjuk ini adalah sebelumnya, selepas dan semasa.
Kami pada mulanya akan menetapkan kedua-dua sebelumnya dan selepas kepada NULL, dan menetapkan semasa ke kepala senarai terpaut.
Selepas ini, kami mengulangi sehingga kami mencapai NULL senarai pautan awal. Kemudian lakukan perkara berikut:
after = current -> next current -> next = previous previous = current current = after
Sekarang mari buat program untuk membalikkan senarai terpaut. Terdapat dua cara untuk mencipta program ini, satu adalah berulang dan satu lagi adalah rekursif.
Program untuk menterbalikkan senarai terpaut (kaedah ekor-rekursif)
Contoh
Demonstrasi
#include <stdio.h> struct Node { int data; struct Node* next; }; Node* insertNode(int key) { Node* temp = new Node; temp->data = key; temp->next = NULL; return temp; } void tailRecRevese(Node* current, Node* previous, Node** head){ if (!current->next) { *head = current; current->next = previous; return; } Node* next = current->next; current->next = previous; tailRecRevese(next, current, head); } void tailRecReveseLL(Node** head){ if (!head) return; tailRecRevese(*head, NULL, head); } void printLinkedList(Node* head){ while (head != NULL) { printf("%d ", head->data); head = head->next; } printf("</p><p>"); } int main(){ Node* head1 = insertNode(9); head1->next = insertNode(32); head1->next->next = insertNode(65); head1->next->next->next = insertNode(10); head1->next->next->next->next = insertNode(85); printf("Linked list : \t"); printLinkedList(head1); tailRecReveseLL(&head1); printf("Reversed linked list : \t"); printLinkedList(head1); return 0; }
Output
Linked list : 9 32 65 10 85 Reversed linked list : 85 10 65 32 9
Program untuk menterbalikkan senarai kaedah terpaut)(Iterative method)
Demonstrasi masa nyata
#include <stdio.h> struct Node { int data; struct Node* next; Node(int data){ this->data = data; next = NULL; } }; struct LinkedList { Node* head; LinkedList(){ head = NULL; } void interReverseLL(){ Node* current = head; Node *prev = NULL, *after = NULL; while (current != NULL) { after = current->next; current->next = prev; prev = current; current = after; } head = prev; } void print() { struct Node* temp = head; while (temp != NULL) { printf("%d ", temp-> data); temp = temp->next; } printf("</p><p>"); } void push(int data){ Node* temp = new Node(data); temp->next = head; head = temp; } }; int main() { LinkedList linkedlist; linkedlist.push(85); linkedlist.push(10); linkedlist.push(65); linkedlist.push(32); linkedlist.push(9); printf("Linked List : \t"); linkedlist.print(); linkedlist.interReverseLL(); printf("Reverse Linked List : \t"); linkedlist.print(); return 0; }
Output
Linked List : 9 32 65 10 85 Reverse Linked List : 85 10 65 32 9
Atas ialah kandungan terperinci Program C untuk membalikkan senarai terpaut. 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

Diberikan di bawah adalah algoritma bahasa C untuk menukar angka Rom kepada nombor perpuluhan: Algoritma Langkah 1 - Mulakan Langkah 2 - Baca angka Rom pada masa jalan Langkah 3 - Panjang: = strlen(roman) Langkah 4 - Untuk i=0 kepada Length-1 Langkah 4.1-suis(roman[i]) Langkah 4.1.1-case'm': &nbs

Perbandingan rentetan leksikografi bermaksud rentetan dibandingkan dalam susunan kamus. Contohnya, jika terdapat dua rentetan 'epal' dan 'rayuan', rentetan pertama akan datang yang terakhir kerana tiga aksara pertama 'aplikasi' adalah sama. Kemudian untuk rentetan pertama aksara ialah 'l' dan dalam rentetan kedua aksara keempat ialah 'e'. Memandangkan 'e' lebih pendek daripada 'l', ia akan didahulukan jika kita menyusun mengikut leksikografi. Rentetan dibandingkan secara leksikografi sebelum disusun. Dalam artikel ini, kita akan melihat teknik yang berbeza untuk membandingkan dua rentetan secara leksikografi menggunakan C++. Menggunakan fungsi compare() dalam rentetan C++ Objek rentetan C++ mempunyai compare()

Senarai terpaut menggunakan peruntukan memori dinamik, iaitu ia berkembang dan mengecut dengan sewajarnya. Ia ditakrifkan sebagai koleksi nod. Di sini, nod mempunyai dua bahagian, data dan pautan. Data, pautan dan senarai terpaut diwakili seperti berikut - Jenis senarai terpaut Terdapat empat jenis senarai terpaut, seperti berikut: - Senarai pautan tunggal / Senarai pautan tunggal Senarai berganda / Berganda Pekeliling Senarai pautan tunggal Pekeliling Senarai pautan berganda Kami menggunakan kaedah rekursif untuk mencari panjang senarai terpaut Logiknya ialah -intlength(nod *temp){ if(temp==NULL) returnl{&n

Fungsi hiperbola ditakrifkan menggunakan hiperbola dan bukannya bulatan dan bersamaan dengan fungsi trigonometri biasa. Ia mengembalikan parameter nisbah dalam fungsi sinus hiperbolik dari sudut yang dibekalkan dalam radian. Tetapi lakukan sebaliknya, atau dengan kata lain. Jika kita ingin mengira sudut daripada sinus hiperbolik, kita memerlukan operasi trigonometri hiperbolik songsang seperti operasi sinus songsang hiperbolik. Kursus ini akan menunjukkan cara menggunakan fungsi sinus songsang hiperbolik (asinh) dalam C++ untuk mengira sudut menggunakan nilai sinus hiperbolik dalam radian. Operasi arcsine hiperbolik mengikut formula berikut -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}, Di mana\:In\:is\:logaritma asli\:(log_e\:k)

Peta ialah sejenis bekas khas dalam C++ di mana setiap elemen adalah sepasang dua nilai, iaitu nilai kunci dan nilai dipetakan. Nilai kunci digunakan untuk mengindeks setiap item, dan nilai yang dipetakan ialah nilai yang dikaitkan dengan kunci. Tidak kira sama ada nilai yang dipetakan adalah unik, kuncinya sentiasa unik. Untuk mencetak elemen peta dalam C++ kita perlu menggunakan iterator. Elemen dalam set item ditunjukkan oleh objek iterator. Iterator digunakan terutamanya dengan tatasusunan dan jenis bekas lain (seperti vektor), dan mereka mempunyai set operasi khusus yang boleh digunakan untuk mengenal pasti elemen tertentu dalam julat tertentu. Iterator boleh dinaikkan atau dikurangkan untuk merujuk elemen berbeza yang terdapat dalam julat atau bekas. Peulang menunjuk ke lokasi memori elemen tertentu dalam julat. Mencetak peta dalam C++ menggunakan iterator Mula-mula, mari lihat cara untuk mentakrifkan

Fungsi nama semula menukar fail atau direktori daripada nama lamanya kepada nama baharunya. Operasi ini serupa dengan operasi bergerak. Jadi kita juga boleh menggunakan fungsi nama semula ini untuk memindahkan fail. Fungsi ini wujud dalam fail pengepala perpustakaan stdio.h. Sintaks fungsi nama semula adalah seperti berikut: intrename(constchar*oldname,constchar*newname); Fungsi rename() fungsi menerima dua parameter. Satu nama lama dan satu lagi nama baru. Kedua-dua parameter adalah penunjuk kepada aksara malar yang mentakrifkan nama lama dan baharu fail. Mengembalikan sifar jika fail berjaya dinamakan semula, jika tidak, mengembalikan integer bukan sifar. Semasa operasi menamakan semula

Masalahnya melaksanakan algoritma Euclidean untuk mencari pembahagi sepunya terbesar (GCD) dan gandaan sepunya terkecil (LCM) bagi dua integer dan mengeluarkan keputusan dengan integer tertentu. Penyelesaian Penyelesaian untuk melaksanakan algoritma Euclidean untuk mencari pembahagi sepunya terbesar (GCD) dan gandaan sepunya terkecil (LCM) bagi dua integer adalah seperti berikut - logik mencari GCD dan LCM adalah seperti berikut - jika (firstno*secondno!=0) { gcd= gcd_rec(firstno, secondno); printf("TheGCDof%dand%dis%d",

Strncmp ialah fungsi perpustakaan yang dipratentukan, terdapat dalam fail string.h, yang digunakan untuk membandingkan dua rentetan dan memaparkan rentetan yang lebih besar. fungsi strcmp (perbandingan rentetan) Fungsi ini membandingkan dua rentetan. Ia mengembalikan perbezaan ASCII bagi aksara tidak sepadan pertama dalam dua rentetan. Sintaks instrcmp(string1,string2); Jika perbezaannya sama dengan sifar, maka string1=string2. Jika perbezaan adalah positif, string1>string2. Jika perbezaannya negatif, string1<string2. Contoh fungsi strncmp Fungsi ini digunakan untuk membandingkan n aksara pertama dua rentetan. sintaks strn
