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

更新于:2021年11月3日

1K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告