• 【链表】循环链表插入元素


    啥是循环链表:

    循环链表是一种链式的存储结构,与单链表不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者头结点,从而构成一个环形的链。

    循环链表的运算与单链表的运算基本一致,所不同的有以下几点:
    • 在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。
    • 在判断是否到表尾时,是判断该结点指针域的值是否是表头结点,当指针域等于表头指针时,说明已到表尾。而非像单链表那样判断链域值是否为NULL。

    思路:

    就是跟单链表插入没啥区别,就是注意如果是头尾插入,需要保持最后一个结点指向头结点。

     1 #include <iostream>
     2 #include <cstdlib>
     3 using namespace std;
     4 #define NULL 0
     5 typedef struct ListNode* CList;
     6 struct ListNode {
     7     int data;
     8     CList next;
     9 };
    10 
    11 //创建空循环链表
    12 CList Create() {
    13     CList L;
    14     L = (CList)malloc(sizeof(ListNode));
    15     L->next = L;
    16     return L;
    17 }
    18 
    19 //寻找第k个与元素
    20 CList FindKth(CList L, int k) {
    21     CList p = L;
    22     int i = 1;
    23     while (p->next != L && i < k) {
    24         p = p->next;
    25         i++;
    26     }
    27     if (i == k)
    28         return p;
    29     else
    30         return NULL;
    31 }
    32 
    33 //插入
    34 void InsertKth(CList L, int k, int item)
    35 {
    36     CList tmp = (CList)malloc(sizeof(ListNode));
    37     tmp->data = item;
    38     //如果在第一个位置插入
    39     if (k == 1) {
    40         tmp->next = L->next;
    41         L->next = tmp;
    42     }
    43     else {
    44         CList node;//当前第k-1个结点
    45         node=FindKth(L, k - 1);
    46         if (!node) {
    47             cout << "结点错误";
    48             return;
    49         }
    50         tmp->next = node->next;
    51         node->next = tmp;
    52     }
    53 }
  • 相关阅读:
    [树状数组]JZOJ 4658 小Z调顺序
    [差分数组]JZOJ 3187 的士
    [BFS]JZOJ 4671 World Tour
    [BFS]JZOJ 4672 Graph Coloring
    [数学]JZOJ 4673 LCS again
    shell:正则表达式和文本处理器
    开发脚本自动部署及监控
    Linux中的重启命令
    nginx和nfs
    网络相关配置
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12653735.html
Copyright © 2020-2023  润新知