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

ย้ายองค์ประกอบแรกไปท้ายสุดของลิงก์ลิสต์ที่กำหนดใน C++

โจทย์

ได้รับลิงก์ลิสต์ เราต้องย้ายองค์ประกอบแรกไปท้ายสุด มาดูตัวอย่างกัน

อินพุต

1 -> 2 -> 3 -> 4 -> 5 -> NULL

เอาต์พุต

2 -> 3 -> 4 -> 5 -> 1 -> NULL

อัลกอริธึม

  • กำหนดลิงก์ลิสต์
  • คืนค่าถ้าลิงก์ลิสต์ว่างหรือมีโหนดเดียว
  • หาโหนดสุดท้ายของลิงก์ลิสต์
  • ทำให้โหนดที่สองเป็นหัวใหม่
  • อัปเดตลิงก์ของโหนดแรกและโหนดสุดท้าย

การนำไปใช้งาน

ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++

#include <bits/stdc++.h> 
using namespace std; 

struct Node { 
    int data; 
    struct Node* next; 
}; 

void moveFirstNodeToEnd(struct Node** head) { 
    if (*head == NULL || (*head)->next == NULL) { 
        return; 
    } 
    struct Node* firstNode = *head; 
    struct Node* lastNode = *head; 
    while (lastNode->next != NULL) { 
        lastNode = lastNode->next; 
    } 
    *head = firstNode->next; 
    firstNode->next = NULL; 
    lastNode->next = firstNode; 
} 

void addNewNode(struct Node** head, int new_data) { 
    struct Node* newNode = new Node; 
    newNode->data = new_data; 
    newNode->next = *head; 
    *head = newNode; 
} 

void printLinkedList(struct Node* node) { 
    while (node != NULL) { 
        cout << node->data << "->"; 
        node = node->next; 
    } 
    cout << "NULL" << endl; 
} 

int main() { 
    struct Node* head = NULL; 
    addNewNode(&head, 1); 
    addNewNode(&head, 2); 
    addNewNode(&head, 3); 
    addNewNode(&head, 4); 
    addNewNode(&head, 5); 
    addNewNode(&head, 6); 
    addNewNode(&head, 7); 
    addNewNode(&head, 8); 
    addNewNode(&head, 9); 
    moveFirstNodeToEnd(&head); 
    printLinkedList(head); 
    return 0; 
}

ผลลัพธ์

หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้

8->7->6->5->4->3->2->1->9->NULL