文章
20
粉丝
224
获赞
56
访问
136.8k
代码较为简洁,我看挺多题解定义的链表都是存在头结点的,而我这里实现的是不带头结点的单链表排序,排序算法使用的是冒泡排序,因为冒泡排序是相邻两个元素进行比较交换,适合链表。
#include<stdio.h>
#include<malloc.h>
struct Node{
int Element; // 节点中的元素
struct Node *Next; // 指向下一节点
} Node; // 这里如果不加结构体变量定义,第13行的sizeof(Node)会报错:Node未定义,但是我在本地编译器上却没问题,可能是这个OJ的问题
// 创建单链表
struct Node *create() {
struct Node *head, *now, *pre; // 单链表的第一个节点、当前节点、上一节点
for (int i = 0; i < 5; ++i) {
now = (struct Node *) malloc (sizeof(Node));
if (i == 0) {
head = now; // 初始化第一个节点为首次输入的节点
pre = now; // 初始化上一节点,后面会进行更新
}
scanf("%d", &(now->Element));
pre->Next = now;
pre = now;
}
return head;
}
// 按照题目要求输出
void print(struct Node *head) {
struct Node *p, *q;
// 对单链表中的节点元素进行冒泡排序
for (int i = 0; i < 5; ++i) {
p = head;
for (int j = 0; j < 4-i; ++j) {
if (p->Element > p->Next->Element) {
int temp = p->Element;
p->Element = p->Next->Element;
p->Next-...
登录后发布评论
暂无评论,来抢沙发