数据结构-链表-有一个带头结点的单链表L,设计一个算法使其元素递增有序

1.算法思想
解法可分为两种:
① 先将链表的数据复制到数组中,再采用时间复杂度为O(nlog2n)的算法进行排序,然后将数组元素依次插入到链表中,是以空间换时间的策略。

② 采用直接插入排序的思想,将链表分为两条链,一条由头结点及一个数据结点构成,另一条由剩下的结点构成。然后依次扫描第二条链中剩下的结点,并通过比较大小插入到第一条链中去。该算法的时间复杂度为O(n^2)

下面的代码采用的是第二种的解法。
2.源代码

void LinkSort(List list) {
	Node pre,r,work;
	r = list->Next->Next;
	list->Next->Next = NULL; //构造只有一个结点的链表
	work = r; //work为第二条链的工作指针
	while (work!=NULL) {
		r = work->Next; //保存work结点后的结点指针
		pre = list; //每次都从表头开始比较
		while (pre->Next != NULL && work->Data > pre->Data)
			pre = pre->Next;

		/*下面两步为插入操作*/
		work->Next = pre->Next;
		pre->Next = work;

		//P向后扫描
		work = r;
	}
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页