C++遞迴插入和遍歷連結串列
我們給出一些整數值,這些整數值將用於形成一個連結串列。任務是首先使用遞迴方法插入和遍歷單鏈表。
遞迴新增節點到末尾
如果頭節點head為NULL → 將節點新增到head
否則新增到head(head → next)
遞迴遍歷節點
如果頭節點head為NULL → 退出
否則列印(head → next)
示例
輸入 − 1 - 2 - 7 - 9 - 10
輸出 − 連結串列:1 → 2 → 7 → 9 → 10 → NULL
輸入 − 12 - 21 - 17 - 94 - 18
輸出 − 連結串列:12 → 21 → 17 → 94 → 18 → NULL
下面程式中使用的方案如下
在這種方法中,我們將使用函式來新增節點和遍歷單鏈表,併為下一個輸入遞迴呼叫它們。
使用包含整數和下一個指標SLLNode* next的結構體SLLNode。
函式addtoEnd(SLLNode* head, int data)接收指向列表頭的指標和資料部分的整數,並將節點新增到連結串列的末尾。
如果頭指標head為NULL,則列表為空,現在新增一個新節點並將其設定為head。將head → next設定為NULL。返回指向此節點的指標。
如果head不為null,則使用head->next = addtoEnd(head->next, data)將節點新增到head → next。
函式traverseList(SLLNode* head)從head開始遍歷並列印每個值。
如果head為NULL,則列印NULL並返回。
否則列印資料值並使用traverseList(head->next)遍歷下一個節點。
在main函式中使用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;
}輸出
如果我們執行上面的程式碼,它將生成以下輸出
Linked List is : 1 -> 8 -> 56 -> 12 -> 34 -> NULL
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP