C 將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字,一個純字母,一個其他字元
阿新 • • 發佈:2018-11-01
//結構體
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;
}