单链表的反序
单向链表的反序图示:
---->[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)
单向链表的选择排序图示: