已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
要解决这样的问题,只要新建三个头结点,然后在原来的单链表中依次查询,找到一类字符结点时,就摘下此结点链接到相应头结点指明的新链表中就是了。 算法如下: //设已建立三个带头结点的空循环链表A、B、C且A、B、C分别是尾指针 void DivideList( LinkList L, LinkList A, LinkList B, LinkList C) ListNode*p=L—>next, *q; while (p) if (p—>>data>='a' &&p—>data﹤='z' ∣∣p—>data>='A' &&p—>data<='Z') q=p; p=p—>next;//指向下一结点 q—>next=A—next; //将字母结点链到A表中 A—>next=q; A=q; } else if( p—>data>='0' &&p—>data﹤='9') {//分出数字结点 q=p; p=p—>next; //指向下一结点 q=—>next=B—next; //将数字结点到B表中 B一>next=q;B=q; } else{ //分出其他字符结点 q=P; P=P一>next; //指向下一结点 q一>next=C一>next; //将其他结点链到C表中 C一>next=q;C=q; } } }