C 将一个单链表拆成3个循环链表,其中一个是纯数字,一个纯字母,一个其他字符

xiaoxiao2025-07-29  36

前面相关操作在这呢,这个函数依托于此

//结构体 typedef struct Node { ElementType data; struct Node * next; } LNode, * LinkNode; //将一个单链表拆成3个循环链表,其中一个是纯数字,一个纯字母,一个其他字符 Status depositeLink(LinkNode L, LinkNode *L1, LinkNode *L2, LinkNode *L3){ LinkNode p = L->next; free(L); //三个表的创建 (*L1) = (LinkNode)malloc(sizeof(LNode)); (*L2) = (LinkNode)malloc(sizeof(LNode)); (*L3) = (LinkNode)malloc(sizeof(LNode)); //初始化,和自身循环 LinkNode p1 = *L1; p1->next = p1; LinkNode p2 = *L2; p2->next = p2; LinkNode p3 = *L3; p3->next = p3; //他们的尾节点需要记住 LinkNode Tail1 = *L1; LinkNode Tail2 = *L2; LinkNode Tail3 = *L3; //遍历单链表 while (p) { //这个需要一个变量复制p LinkNode temp = p; //紧接着就要将p重新赋值,因为这个要是在下面写的话,就是把p改变了 //因为它们指向的都是同一块地址,就跟头插法的前两句一样 p = p->next; if((temp->data >= 'a' && temp->data <= 'z') || (temp->data >= 'A' && temp->data <= 'Z')) { //因为有尾指针,新插进来的将其前驱后继整明白了 temp->next = Tail1->next; Tail1->next = temp; //尾指针也就变成了新插进来的这个 Tail1 = temp; }else if(temp->data >= '0' && temp->data <= '9'){ temp->next = Tail2->next; Tail2->next = temp; Tail2 = temp; } else{ temp->next = Tail3->next; Tail3->next = temp; Tail3 = temp; } } return OK; }
转载请注明原文地址: https://www.6miu.com/read-5033926.html

最新回复(0)