
题如下:
在一个带头结点的单链表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;
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)