Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแทรกแบบเรียกซ้ำและรายการที่เชื่อมโยงการข้ามผ่านใน C++


เราได้รับค่าจำนวนเต็มที่จะใช้เพื่อสร้างรายการที่เชื่อมโยง ภารกิจคือการแทรกก่อนแล้วจึงข้ามผ่านรายการที่เชื่อมโยงเพียงอย่างเดียวโดยใช้วิธีการแบบเรียกซ้ำ

การเพิ่มโหนดแบบเรียกซ้ำในตอนท้าย

  • ถ้า head เป็น NULL → เพิ่ม node ที่ head

  • เพิ่มไปที่ head( head → next )

การข้ามผ่านของโหนดแบบเรียกซ้ำ

  • ถ้า head เป็น NULL → exit

  • พิมพ์อย่างอื่น ( หัว → ถัดไป )

ตัวอย่าง

ป้อนข้อมูล − 1 - 2 - 7 - 9 - 10

ผลผลิต − Linked list :1 → 2 → 7 → 9 → 10 → NULL

ป้อนข้อมูล − 12 - 21 - 17 - 94 - 18

ผลผลิต − Linked list :12 → 21 → 17 → 94 → 18 → NULL

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในแนวทางนี้ เราจะใช้ฟังก์ชันต่างๆ เพื่อเพิ่มโหนดและข้ามผ่านรายการที่เชื่อมโยงโดยลำพัง และเรียกซ้ำสำหรับอินพุตถัดไป

  • ใช้โครงสร้าง SLLNode ด้วยจำนวนเต็มและตัวชี้ถัดไป SLLNode* ถัดไป

  • ฟังก์ชัน addtoEnd(SLLNode* head, int data) นำตัวชี้ไปยังส่วนหัวของรายการและจำนวนเต็มสำหรับส่วนของข้อมูล และเพิ่มโหนดที่ส่วนท้ายของรายการที่เชื่อมโยง

  • หากตัวชี้ส่วนหัวเป็น NULL รายการจะว่างเปล่า ตอนนี้ให้เพิ่มโหนดใหม่และตั้งเป็นส่วนหัว เพิ่มหัว → ถัดไปเป็น NULL ส่งคืนตัวชี้ไปยังโหนดนี้

  • หาก head ไม่เป็นค่าว่าง ให้เพิ่มโหนดไปที่ head → next โดยใช้ head->next =addtoEnd(head->next, data)

  • ฟังก์ชัน traverseList(SLLNode* 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;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

Linked List is :
1 -> 8 -> 56 -> 12 -> 34 -> NULL