
上QQ阅读APP看书,第一时间看更新
008 分拆循环单链表
已知一个带哨兵结点h的循环单链表中的数据元素含有整数和负数,试编写一个算法,构造两个循环单链表,使一个循环单链表中只含正数,另一个循环单链表只含负数。例如,创建一个循环单链表{55,106,-29,-203,761,329,-76,432,87},分拆后变成两个循环单链表,一个只含有正数,一个只含有负数,即{55,106,761,329,432}和{-29,-203,-76}。
【分析】
初始时,先创建两个空的单链表ha和hb,然后依次查看指针p指向的结点元素值,如果值为正数,则将其插入到ha中,否则,将其插入到hb中最后,使最后一个结点的指针域指向头结点,构成循环单链表。
第1章\范例01-09.c




运行结果(见图1.24)

图1.24 算法运行效果
从上述的程序容易看出,循环单链表的创建与单链表的创建基本一样,只是最后增加了一条语句:
if(t!=NULL)
t->next=h;
使最后一个结点指向第一个结点,构成一个循环单链表。