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+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.