c语言实现链表的若干操作【进阶版】

博主通过C语言实现了更复杂的链表操作,以满足对编程的深入探索。文中提供了相应的代码示例,旨在阐述如何在C语言中进行高级的链表操作。
摘要由CSDN通过智能技术生成

    简单的链表操作已经无法满足我的电脑对于编程的渴望,它的键盘已经饥渴难耐。风扇轰轰作响的咆哮让我仿佛置身舒马赫的车里。

    为了安抚我的电脑,我又写了一些较为复杂的链表操作来给它运行。同样是采用c语言编写。代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef char LinkType;

typedef struct LinkNode {
    LinkType data;
    struct LinkNode* next;
} LinkNode;
LinkNode* creat(LinkNode* head,LinkType data){
    LinkNode* l = (LinkNode*)malloc(sizeof(LinkNode));
    l->next = NULL;
    head->next = l;
    head = l;
    l->data = data;
    return l;
}
/**
* @brief 逆序打印单链表. 
* 
* @param head 
*/
void LinkListReversePrint(LinkNode* head){
    if (head == NULL)//非法输入
        return;
    else{
        printf("%d",head->data);
        LinkListReversePrint(head->next);
        }
}

/** 
* @brief 不允许遍历链表, 在 pos之前插入 
* 
* @param head 
* @param pos 
* @param value 
*/
void LinkListInsertBefore(LinkNode** head, LinkNode* pos, LinkType value){
    if (head == NULL)
        return;
    //在pos之前插入value值
    //可以转化为在pos之后插入value
    LinkNode* node = (LinkNode*)malloc((sizeof(LinkNode)));
    node->next = pos->next;
    pos->next = node;
    node->data = pos->data;
    pos->data = value;
    return;
}
/**
* @brief JosephCycle问题
*
* @param head
* @param food
*/
LinkNode* JosephCycle(LinkNode* head, size_t food){
    //判断环是否为空;
    //head->data是每个人的号码
    if (head == NULL)
        return NULL;
    LinkNode* tmp = head;
    LinkNode* add =tmp;
    int count = 1;
    while(tmp->next != head){
        ++count;
        tmp = tmp->next;
    }
    tmp = head;
    while(tmp){
        for (int i = 1; i < food; ++i) {
            if (tmp->data == '0'){
                for (int j = 0; j < count; ++j) {
                    tmp = tmp->next;
                    if (tmp->data != '0')
                        break;
                }
                if (tmp->data == '0'){
                    retu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值