要求说明
输入一组数,构建有序链表。
整体思路
用数组保存这组数,每次都去找最小值,把最小值构建结点并使用头插法插入到单链表中。 然后将该值删掉(为简便起见,把值弄成MAX)。
这里使用的是类直接插入的排序方法。
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
typedef struct node
{
int val
;
struct node
*next
;
} node
;
void printNode(node
* L
)
{
while(L
->next
!=NULL)
{
L
= L
->next
;
printf("%d ",L
->val
);
}
}
int main()
{
int n
,i
,j
;
int min
=MAX
;
int min_index
= -1;
int arr
[100];
scanf("%d",&n
);
for(i
=0; i
<n
; i
++)
{
scanf("%d",&arr
[i
]);
}
node
*head
,*s
;
head
= (node
*)malloc(sizeof(node
));
head
->next
= NULL;
for(i
=0; i
<n
; i
++)
{
for(j
=0; j
<n
; j
++)
{
if(min
>arr
[j
])
{
min
= arr
[j
];
min_index
= j
;
}
}
s
= (node
*)malloc(sizeof(node
));
s
->val
= min
;
s
->next
= head
->next
;
head
->next
= s
;
arr
[min_index
] =MAX
;
min
= MAX
;
}
printNode(head
);
return 0;
}
运行结果
由于我们每次都是找最小值,故是从小到大的顺序插入。
而我们使用的是头插法,故最终结果从大到小。
所以如果想要让最终的单链表从小到大,每次都找最大值即可。
10 1 9 5 4 3 2 1 5 8 6 9 8 6 5 5 4 3 2 1 1