首页 > 其他分享 >链表4: 循环链表

链表4: 循环链表

时间:2024-04-18 17:33:40浏览次数:20  
标签:Node 结点 cout nextNode 链表 header 循环

链表4-循环链表


循环链表的特点: 链表的尾结点后继指向头结点


循环链表的结构

typedef struct Node{
    int data; //数据域
    struct Node *nextNode; //后继
} Node;

循环链表的初始化

Node* initHeader(){
    //创建头结点
    Node *header = (Node*)malloc(sizeof(Node));
    //头结点的数据(用于存储链表长度)
    header->data = 0;
    //头结点的后继
    header->nextNode = header;
    //返回
    return header;
}

后插法添加元素

//后插法添加元素(返回尾结点)
Node* addNode(Node *header, Node *roar){
    //空链表
    if(!header){
        cout << "链表不存在!" << endl;
        return NULL;
    }
    //开辟空间
    Node *newNode = (Node*)malloc(sizeof(Node));
    //赋值 
    cout << "输入值" << endl;
    cin >> newNode->data;
    newNode->nextNode = NULL;
    //尾结点后继指向新结点
    roar->nextNode = newNode;
    //新结点后继指向header
    newNode->nextNode = header;
    //更新链表长度
    header->data++;
    //更新尾结点
    return newNode;
}

链表长度

void sizeOfLinkList(Node *header){
    //空链表
    if(!header){
        cout << "链表不存在!" << endl;
        return;
    }  
    cout << "链表长度: " << header->data << endl;
}

输出链表

void display(Node *header){
    //空链表
    if(!header){
        cout << "链表不存在!" << endl;
        return;
    }    
    Node *curNode = header->nextNode;
    while(curNode!=header){
        cout << curNode->data << " ";
        //前进
        curNode = curNode->nextNode;
    }
    cout << endl;
}

测试

int main(){
    int choice;
    Node *header=NULL;
    Node *roar=NULL;
    int length=0;

    do{
        cout << "--------------" << endl;
        cout << "1.创建" << endl;
        cout << "2.在尾部插入新节点" << endl;
        cout << "3.输出链表" << endl;
        cout << "0.退出" << endl;
        cout << "输入选项:";
        cin >> choice;
        switch(choice){
            case 1:
                header = initHeader();
                roar = header;
                break;
            case 2:
                roar = addNode(header, roar, length);
                break;
            case 3:
                display(header);
                break;
            default:
                break;
        }
    }while(choice!=0);

    system("pause");
    return 0;
}

标签:Node,结点,cout,nextNode,链表,header,循环
From: https://www.cnblogs.com/HIK4RU44/p/18144049

相关文章

  • 实验6循环结构程序设计(for语句的应用)
    实验6循环结构程序设计(for语句的应用)一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程序调试;4.了解中国算法,百钱买百鸡。二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容及步骤实验内容:项目......
  • 实验5循环结构程序设计(while、do-while语句的应用)
    实验5循环结构程序设计(while、do-while语句的应用)一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程序调试;4.了解中国算法,百钱买百鸡。二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容及步骤项......
  • LeetCode- 19 删除链表的倒数第N个节点
    题目地址https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/参考实现/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){t......
  • 链表3: 双链表
    链表3:双链表双链表的结构双链表与单链表最大的不同就是不仅存储了结点的后继,还存储了结点的前驱.创建双链表的数据结构typedefstructNode{structNode*preNode;//前驱intdata;//数据域structNode*nextNode;//后继}Node;双链表初始化//返......
  • 【python】如何优雅的终止while循环
    1.背景需求python需要与外界或终端交互时,常常需要使用while循环一直跑。如果需要终止程序,一般使用Ctrl+c,此时终端会打印一大堆backtrace,并且无法保留当前运行的状态,非常不优雅。使用KeyboardInterrupt异常捕捉,可以实现优雅的终止while循环。 2.实现方法try:while(Tr......
  • 猴子吃桃 递归 循环 等比数列
    do-while#include<stdio.h>intmain(){intn=1;//第十天只剩下1个桃子,所以初始值为1intday=9;//第十天是已知条件,所以循环从第九天开始do{n=(n+1)*2;//每天都是前一天的一半加1,所以这里计算后一天的桃子数day--;//天数减1}while(day>=0);//......
  • 引用循环与内存泄漏
    Rust的内存安全性保证使其难以意外地制造永远也不会被清理的内存(被称为 内存泄漏(memoryleak)),但并不是不可能。Rust并不保证完全防止内存泄漏,这意味着内存泄漏在Rust中被认为是内存安全的。这一点可以通过 Rc<T> 和 RefCell<T> 看出:创建引用循环的可能性是存在的。这会造......
  • 1025 反转链表
    我看其他博客用的reverse,但是下标我真的有点糊涂,以下是参考某位dalao的。#include<bits/stdc++.h>usingnamespacestd;structnode{ intsno; intdata; intnext;}s[100010];intmain(){ intstart,cnt,fz;//start cin>>start>>cnt>>fz; for(inti=0;i<cnt......
  • 说说你对链表的理解?常见的操作有哪些?
    一、是什么链表(LinkedList)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域 节点用代码表......
  • 合并k个已排序链表
    利用新的ArrayList合并k个链表 遍历提供给我们的数组,依次得到各个头结点。依次遍历每个头结点下的链表,把他们加入新的数组中。利用Collections.sort()方法得到有序的数组最后把这个新的数组转换成链表并返回。publicListNodemergeKLists(ArrayList<ListNode>lists){......