解析:若原单链表有一个或一个以上的数据结点,首先构造只含一个数据结点的有序表(只含一个数据结点的单链表一定是有序的)。扫描原单链表余下的结点*p(直到p==NULL)为止,在有序表中通过比较找插入*p的前驱结点*q,然后将*p插入到*q之后(这里实际上采用的是直接插入法排序方法),对应的算法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void
Sort(LinkList *head)
{
LinkList *p = head->next, *q, *r;
if
(p != NULL)
{
r = p->next;
/*r保存p结点后续结点*/
p->next = NULL;
/*构造只含一个结点的有序表*/
p = r;
while
(p != NULL)
{
r = p->next;
q = head;
while
(q->next != NULL && q->next->data < p->data)
/*在有序表中找到p的插入位置*/
{
q=q->next;
}
p->next = q->next;
/*将p插入q之后*/
q->next->p;
p = r;
/*扫描单链表余下结点*/
}
}
}
|
文章作者:武汉SEO
本文地址:http://www.zhengbiao.net/personal/sort-single-linked-list-node/
版权所有 © 转载时必须以链接形式注明作者和原始出处!