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


    啥是循环链表:

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

    循环链表的运算与单链表的运算基本一致,所不同的有以下几点:
    • 在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像单链表那样置为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 }
  • 相关阅读:
    linux addr2line 定位so库崩溃位置
    转:关于Android机型适配这件小事儿
    转:android studio 改编译区背景色
    转:ios review推送与执行
    k2pdfopt下载页
    转:让kindle更好的支持pdf
    转:各种文本格式转换的网站
    转: iOS崩溃堆栈符号表使用与用途
    转: 腾讯Bugly干货分享:Android应用性能评测调优
    转: git的图文使用教程(巨详细)
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12653735.html
Copyright © 2020-2023  润新知