对链表进行排序,使其递增有序

算法思路:重新有序创建链表,即先将原链表L变成一个只有首结点的单结点链表,显然此时的单结点链表一定是递增有序的,在此之前应该用指针p记录原链表的除首结点之外的哪些节点,即p=p->next->next,然后遍历链表p,依次将链表p中的结点取下来,插入到链表L中的合适位置,使得插入结点之后链表L之后链表L依然递增有序,具体做法是每次要插入p链表中的结点之前先遍历链表L找到第一个大于p中结点的结点q,记录q结点的前驱结点pre,将q中的结点插入到pre之后即可

算法实现:


//对链表进行排序
void Sort(LinkList& L)
{
	LNode* p = L->next->next;    //p用于遍历原链表中第二个结点往后的那些结点
	L->next->next = NULL;       //建立一个只有一个结点的有序链表

	LNode* pre, * temp, * q;

	while (p != NULL)
	{
		temp = p->next;  //用于取得链表p的下一个节点

		//找到p结点在L链表中的位置,将其插入该位置
		for (pre = L, q = L->next; q != NULL; pre = q, q = q->next)
		{
			if (q->data > p->data)
				break;	
		}
		p->next = pre->next;
		pre->next = p;

		p = temp;
	}
}

 算法效果:

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值