链表A拆分成奇数和偶数值链表B和C

链表A拆分成奇数和偶数值链表B和C,第1张

题如下:

在一个带头结点的单链表A中,头指针为a,设计算法将A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值为奇数的结点,而C表的结点为A表中值为偶数的结点(链表A的元素类型为整型,要求B、C表除了头结点可以新开辟空间外,其余结点均利用A表的结点,不得申请新的结点空间)最后要求遍历B,C链表。

这是一个比较常见的数据结构里面的基础题。

解该题的关键在于要弄清楚单链表里面的指针的指向关系。

这里是其的数据存储结构

typedef struct Node
{
    int data;      // data域用于存储数据元素
    struct Node* next;  // next域用于存放指向其后继的指针
}LNode, * PNode, * LinkList;  // LinkList为头指针

这里是其的算法实现(注意看题中所给的要求)

void SplitList(LinkList a, LinkList* b, LinkList* c)
{
    LinkList A, B, C;
    A = a->next;
    C = *c;
    B = *b;
    while (A) //通过A链表是否为空作为是否结束循环的标志
    {
        if ((A->data) % 2 == 0)//判断数据是奇数还是偶数
        {
            a->next = A->next;
            C->next = A;
            C = A;     // 重点
            C->next = NULL;
            A = a->next;
        }
        else
        {
            a->next = A->next;
            B->next = A;
            B = A; // 重点
            B->next = NULL;
            A = a->next;
        }
    }
}


 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1498630.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-25
下一篇2022-06-25

发表评论

登录后才能评论

评论列表(0条)

    保存