📌  相关文章
📜  数据结构示例-循环链表的末端插入新节点(1)

📅  最后修改于: 2023-12-03 15:40:01.823000             🧑  作者: Mango

数据结构示例-循环链表的末端插入新节点

循环链表是一种特殊的链表,其中最后一个元素指向第一个元素,形成了一个循环。在循环链表中,末端插入新节点可以很方便地实现,在这篇文章中,我们将学习如何在循环链表的末端插入新节点。

算法实现

在循环链表中末端插入新节点的算法比较简单,具体步骤如下:

  1. 如果链表为空,将新节点作为第一个节点插入链表,并将其next指针指向自身。
  2. 如果链表不为空,则找到链表最后一个节点p,将p的next指针指向新节点,将新节点的next指针指向第一个节点。
  3. 将链表的头节点指向链表第一个节点。
算法实现代码

以下是使用C++实现循环链表的末端插入新节点算法的代码:

#include <iostream>
using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
};

void InsertAtEnd(ListNode** head_ref, int new_data) {
    ListNode* new_node = new ListNode(new_data);
    ListNode *last = *head_ref;

    if (*head_ref == NULL)
    {
        *head_ref = new_node;
        new_node->next = *head_ref;
        return;
    }

    while (last->next != *head_ref)
        last = last->next;

    last->next = new_node;
    new_node->next = *head_ref;
}

void printList(ListNode* head)
{
    ListNode* temp = head;

    if (head != NULL)
    {
        do
        {
            cout << temp->val << " ";
            temp = temp->next;
        }
        while (temp != head);
    }
}

int main()
{
    ListNode* head = NULL;

    InsertAtEnd(&head, 1);
    InsertAtEnd(&head, 2);
    InsertAtEnd(&head, 3);
    InsertAtEnd(&head, 4);
    InsertAtEnd(&head, 5);

    cout << "Circular Linked List after inserting at the end: ";
    printList(head);

    return 0;
}

以上代码会输出以下结果:

Circular Linked List after inserting at the end: 1 2 3 4 5
总结

在循环链表中末端插入新节点是非常简单的,只需要对链表最后一个节点的next指针进行操作即可。链接从链表的最后一个节点指向新节点,新节点的next指针指向链表的第一个节点。

在添加新节点之前需要对链表是否为空进行检查,如果链表为空,则新节点作为第一个节点,新节点的next指针指向自己。如果链表不为空,则需要遍历整个链表,找出最后一个节点。