首页 > 其他分享 >奇偶序号分割单链表(C语言)

奇偶序号分割单链表(C语言)

时间:2024-10-22 18:45:47浏览次数:8  
标签:奇偶 单链 LNode NULL next LinkList ra rb C语言

算法思想:

要想将单链表L按照奇偶序号分割为两个单链表A(奇),B(偶),我们便可以定义一个变量来记录当前遍历的结点序号的奇偶,两个指针 ra,rb,ra负责将奇数位置结点赋到A中,rb同理

核心代码:
void devide(LinkList L,LinkList A,LinkList B)
{
    int index=1;
    LNode*p=L->next;
    LNode*ra=A;
    LNode*rb=B;
    while(p!=NULL)
    {
        if(index%2!=0)
        {
            ra->next=p;
            ra=p;
        }
        else{
            rb->next=p;
            rb=p;
        }
        index++;
        p=p->next;
    }
    ra->next=NULL;
    rb->next=NULL;
}
可运行的完整代码示例:

#include"stdio.h"
#include"stdlib.h"
typedef struct LNode
{
    int data;
    struct LNode*next;
}LNode,*LinkList;

void wei_insert(LinkList L)
{
    int x;
     printf("请输入链表中的元素:");
    scanf("%d",&x);
    LNode*r=L;
    while(x!=-1){
        LNode*s=(LNode*)malloc(sizeof(LNode));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
    r->next=NULL;
}

void devide(LinkList L,LinkList A,LinkList B)
{
    int index=1;
    LNode*p=L->next;
    LNode*ra=A;
    LNode*rb=B;
    while(p!=NULL)
    {
        if(index%2!=0)
        {
            ra->next=p;
            ra=p;
        }
        else{
            rb->next=p;
            rb=p;
        }
        index++;
        p=p->next;
    }
    ra->next=NULL;
    rb->next=NULL;
}
void print_list(LinkList L){
    LNode*p=L->next;
    while(p!=NULL){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

void free_list(LinkList L)
{
    LNode*p=L->next;
    while(p!=NULL){
        LNode*q=p;
        p=p->next;
        free(q);
    }
    free(L);
}

int main()
{
    LinkList L=(LinkList)malloc(sizeof(LNode));
    LinkList A=(LinkList)malloc(sizeof(LNode));
    LinkList B=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    A->next=NULL;
    B->next=NULL;
    wei_insert(L);
    devide(L,A,B);
    printf("分离后的奇序号A中的元素:");
    print_list(A);
    printf("分离后的奇序号B中的元素:");
    print_list(B);
    free_list(A);
    free_list(B);
    free_list(L);
}

标签:奇偶,单链,LNode,NULL,next,LinkList,ra,rb,C语言
From: https://blog.csdn.net/m0_74181956/article/details/143165774

相关文章

  • C语言学习第9天
    目录字符数组概念定义和初始化定义:初始化方式:二维字符数组字符串操作函数头文件:#include函数名:strlen(s)sizeof()和strlen()的区别函数名:strcmp(s1,s2)函数名:strcpy(s1,s2)函数名:strcat(s1,s2)函数名:void*memset(void*s,intc,size_tn);字符串输入gets()......
  • C语言中的初始化是什么意思
    在C语言中,初始化是指在定义变量时为其赋予初值的过程。通过初始化,可以确保变量在使用之前具有已知的初始值,避免了未初始化变量的不确定行为。初始化可以在变量定义时直接赋值,也可以通过赋予默认值或调用特定的初始化函数来完成。C语言中的初始化在C语言中,初始化是指在定义变......
  • C语言使用指针作为函数参数,并利用函数嵌套求输入三个整数,将它们按大到小的顺序输出。(
    输入三个整数,要求从大到小的顺序向他们输出,用函数实现。   本代码使用到了指针和函数嵌套。   调用指针做函数ex,并嵌套调用指针函数exx在函数ex中。(代码在下面哦!)一、关于函数 ex  1. 这个函数接受三个指针参数 int*p1 、 int*p2 和 int*p3 ,分别指......
  • C语言中如何实现链表
    文章开头:在C语言中,实现链表主要涉及以下几个步骤:定义链表的结点、创建链表、添加链表结点、删除链表结点、查找链表结点、打印链表和释放整个链表。我们以一个单链表为例,每一个结点包括两部分:一部分是数据域,存放元素的值;另一部分是指针域,存放下一个结点的地址。创建链表首先需要......
  • 如何在C语言中使用结构体进行数据管理
    #如何在C语言中使用结构体进行数据管理在C语言中,结构体是一种方便、高效的数据管理方式。结构体允许用户将不同类型的数据项组织在一起,它们常被用于代表一个有实体意义的数据集合。在使用结构体进行数据管理时,关键优势包括数据封装、类型安全、易于维护性。数据封装意味着可以......
  • 【C语言】文件操作(2)(文件缓冲区和随机读取函数)
    文章目录一、文件的随机读取函数1.fseek函数2.ftell函数3.rewind函数二、文件读取结束的判断1.被错误使用的feof2.判断文件读取结束的方法3.判断文件结束的原因feofferror判断文件读取结束原因示例三、文件缓冲区一、文件的随机读取函数  在上一篇的文章中,我......
  • C语言学习笔记4
    函数函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。C语言的函数分为:1.库函数2.自定义函数对于库函数引用对于头文件即可使用,自定义函数需要自己调用与声明函数的调用与声明C语言中的函数......
  • C语言第三学:分支和循环
       C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if、switch实现分⽀结构,使⽤for、while、dowhi......
  • 刷c语言练习题9(牛客网)
    1、12345678char*getmemory(void){    charp[]= "helloworld";    returnp;}voidtest(void){    char*str=NULL;    str=getmemory(); printf(str);}请问运行Test函数会有什么样的结果?A、出错B、输出"helloworld"C、输出空......
  • c语言小结——使电脑关机,输入正确信息取消关机
    一:代码展示 #include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){charinput[20]={0};system("shutdown-s-t60");agin:printf("请输入:我是帅哥,否则电脑将在1分钟后关机\n");scanf("%s",inpu......