在C++中遞歸插入和遍歷鍊錶
我們得到了用來形成鍊錶的整數值。任務是使用遞歸方法先插入然後遍歷單鍊錶。
在最後遞歸加入節點
如果head 為NULL → 將節點加入head
- ##否則加入head( head → next )
- 如果head 為NULL → 退出
- 否則印出( head → next )
#輸入− 1 - 2 - 7 - 9 - 10
#輸出
輸出 strong>− 鍊錶:1 → 2 → 7 → 9 → 10 → NULL
輸入− 12 - 21 - 17 - 94 - 18
輸出− 鍊錶:12 → 21 → 17 → 94 → 18 → NULL
下面程式中所使用的方法如下#在這種方法中,我們將使用函數新增節點並遍歷單鍊錶並遞歸呼叫它們以進行下一個輸入。- 採用帶有整數和下一個指標 SLLNode* 的結構體 SLLNode 。
- 函數 addtoEnd(SLLNode* head, int data) 取得指向鍊錶頭的指標和資料部分的整數,並將節點加入到鍊錶的末端。 li>
- 如果頭指標為 NULL,則清單為空,現在新增一個節點並將其設為頭。將 head → next 加為 NULL。傳回指向該節點的指標
- 如果 head 不為 null,則使用 head->next = addtoEnd(head->next, data) 將節點新增至 head → next。
- 函數 traverseList(SLLNode* head) 從 head 開始遍歷並列印每個值。
- 如果head 為NULL,則列印NULL 並傳回.
- 否則列印資料值並使用traverseList(head->next) 遍歷下一個。
- 在主建立清單中使用addtoEnd() 並使用 traverseList() 列印清單。
#include <bits/stdc++.h>
using namespace std;
struct SLLNode {
int data;
SLLNode* next;
};
SLLNode* addtoEnd(SLLNode* head, int data){
if (head == NULL){
SLLNode *nodex = new SLLNode;
nodex->data = data;
nodex->next = NULL;
return nodex;
}
else{
head->next = addtoEnd(head->next, data);
}
return head;
}
void traverseList(SLLNode* head){
if (head == NULL){
cout <<"NULL";
return;
}
cout << head->data << " -> ";
traverseList(head->next);
}
int main(){
SLLNode* head1 = NULL;
head1 = addtoEnd(head1, 1);
head1 = addtoEnd(head1, 8);
head1 = addtoEnd(head1, 56);
head1 = addtoEnd(head1, 12);
head1 = addtoEnd(head1, 34);
cout<<"Linked List is :"<<endl;
traverseList(head1);
return 0;
}
登入後複製
輸出如果我們執行上述程式碼,將會產生以下輸出#include <bits/stdc++.h> using namespace std; struct SLLNode { int data; SLLNode* next; }; SLLNode* addtoEnd(SLLNode* head, int data){ if (head == NULL){ SLLNode *nodex = new SLLNode; nodex->data = data; nodex->next = NULL; return nodex; } else{ head->next = addtoEnd(head->next, data); } return head; } void traverseList(SLLNode* head){ if (head == NULL){ cout <<"NULL"; return; } cout << head->data << " -> "; traverseList(head->next); } int main(){ SLLNode* head1 = NULL; head1 = addtoEnd(head1, 1); head1 = addtoEnd(head1, 8); head1 = addtoEnd(head1, 56); head1 = addtoEnd(head1, 12); head1 = addtoEnd(head1, 34); cout<<"Linked List is :"<<endl; traverseList(head1); return 0; }
Linked List is : 1 -> 8 -> 56 -> 12 -> 34 -> NULL
以上是在C++中遞歸插入和遍歷鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

SQL中MINUS的用法及具體程式碼範例在SQL中,MINUS是一種用於在兩個結果集之間執行差集操作的運算子。它用於從第一個結果集中刪除與第二個結果集中相同的行。 MINUS操作符傳回的結果集將包含僅存在於第一個結果集中的行。下面透過具體的程式碼範例來示範MINUS的用法:假設有兩個表-"table1"和"table2",它們的結構如下:表名:table1字段

是的,C++Lambda表達式可以透過使用std::function支援遞歸:使用std::function捕捉Lambda表達式的參考。透過捕獲的引用,Lambda表達式可以遞歸呼叫自身。

遞歸演算法透過函數自呼叫解決結構化的問題,優點是簡潔易懂,缺點是效率較低且可能發生堆疊溢位;非遞歸演算法透過明確管理堆疊資料結構避免遞歸,優點是效率更高且避免堆疊溢出,缺點是程式碼可能更複雜。選擇遞歸或非遞歸取決於問題和實現的特定限制。

Java是一種流行的程式語言,具有強大的檔案處理功能。在Java中,遍歷資料夾並取得所有檔案名稱是一種常見的操作,可以幫助我們快速定位和處理特定目錄下的檔案。本文將介紹如何在Java中實作遍歷資料夾並取得所有檔案名稱的方法,並提供具體的程式碼範例。 1.使用遞歸方法遍歷資料夾我們可以使用遞歸方法遍歷資料夾,遞歸方法是一種自身呼叫自身的方式,可以有效地遍歷資料夾中

尾遞歸最佳化(TRO)可提高特定遞歸呼叫的效率。它將尾遞歸呼叫轉換為跳轉指令,並將上下文狀態保存在暫存器中,而不是堆疊上,從而消除對堆疊的額外呼叫和返回操作,提高演算法效率。利用TRO,我們可以針對尾遞歸函數(例如階乘計算)進行最佳化,透過將tail遞歸呼叫替換為goto語句,編譯器會將goto跳轉移化為TRO,最佳化遞歸演算法的執行。

1.開啟wps軟體,進入wps文字的操作介面。 2、在該介面內找到插入選項。 3.點選插入選項,在其編輯區域內找到形狀選項。 4.點選形狀選項,在其子級選單中找到推薦選項。 5、在推薦選項內找到中國地圖選項。 6.點選中國地圖選項,用滑鼠左鍵在編輯輸入區裡拖曳,就得到了我們需要的中國地圖。

遞歸函數是一種在字串處理中反覆呼叫自身來解決問題的技術。它需要一個終止條件以防止無限遞歸。遞歸在字串反轉和回文檢查等操作中被廣泛使用。
