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