链表基本排序(逆置、冒泡、选择、插入)

本文详细介绍了单链表的四种排序方式:反序、冒泡排序、选择排序和插入排序。通过图示和步骤解析了每种排序算法的实现方法,帮助理解链表排序的逻辑。
摘要由CSDN通过智能技术生成

单链表的反序


单向链表的反序图示:
                ---->[1]---->[2]---->[3]...---->[n]---->[NULL](原链表)
               

              1->next  2->next  3->next   n->next  head

                head   1->next  2->next  3->next   n->next

                [NULL]<----[1]<----[2]<----[3]<----...[n]<----(反序后的链表)

反序也就是头指针指向最后一个结点,然后最后一个结点指向倒数第二个结点,以此类推,直到第一个结点指向空指针

           实现方法:

(1)首先考虑如何能实现整个反序过程,很容易想到必须有一个指针P1进行读取每个结点,将每个结点的指向改变,还要有一个指针P2来存储每次要更改的那个指向,然后还要有一个临时指针P用来存储需要更改的指针的下一个指针。

(2)先将各个功能指针初始化,P1指向头指针,P2指向空指针;

(3)先用P把下一个要截取的结点储存起来,然后开始改变当前结点的指向

(4)改变要指向的结点P2,P1移动到下一个结点,循环遍历

struct num *Reverse(struct *pHead)
{
	struct *p1;              //用来遍历结点一个一个截取结点 
	struct *p2;             //用来储存要指向的结点 
	struct *p;             //用来保存下一个要截取的结点 
	p1=pHead;             //从头指针开始遍历 
	p2=NULL;             //第一个要指向空指针 
	while(p1!=NULL)
	{
		p=p1->next;          //保存下一个结点 
		p1->next=p2;        //改变该结点的指向 
		p2=p1;             //将下一个要指向的结点替换掉上一个 
		p1=p;             //移动下标到下一个结点 
	}
	pHead=p1;                //头指针指向最后,改变顺序呢 
	return pHead;
}

单链表的选择排序

(1)基本思想:

对单链表进行选择排序的基本思想和数组基本一样,选择一个结点或者元素和其他进行比较,每次找出剩下成员中最小的那个,因为单链表和数组有差异,因此在一些操作上有差别,对于链表,则是选出一个结点进行比较,然后将最小的结点放入另一个空链表中,依次类推,直到将原链表排成有序链表。

(2)

单向链表的选择排序图示:
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值