1. 程式人生 > >C 將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字,一個純字母,一個其他字元

C 將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字,一個純字母,一個其他字元

前面相關操作在這呢,這個函式依託於此

//結構體
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; }