用c语言写一个函数,要求传入链表头节点后,把链表中所有节点按该节点中的字符串的首字母在字母表顺序进行排序,要求大写字母在前小写字母在后,最后再返回这个链表的头节点
时间: 2023-04-06 10:03:33 浏览: 84
c语言中用链表实现的排序
好的,这个问题我可以回答。以下是一个用C语言实现的函数,可以实现按照字符串首字母在字母表顺序进行排序的功能:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
char str[100];
struct node *next;
} Node;
Node *sortList(Node *head) {
if (head == NULL || head->next == NULL) {
return head;
}
Node *p = head;
Node *q = head->next;
Node *r = NULL;
while (q != NULL) {
p = head;
while (p != q) {
if (strcmp(p->str, q->str) > 0) {
char temp[100];
strcpy(temp, p->str);
strcpy(p->str, q->str);
strcpy(q->str, temp);
}
p = p->next;
}
r = q;
q = q->next;
}
return head;
}
int main() {
Node *head = (Node *)malloc(sizeof(Node));
strcpy(head->str, "Hello");
Node *node1 = (Node *)malloc(sizeof(Node));
strcpy(node1->str, "world");
Node *node2 = (Node *)malloc(sizeof(Node));
strcpy(node2->str, "CSDN");
Node *node3 = (Node *)malloc(sizeof(Node));
strcpy(node3->str, "AI");
head->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = NULL;
head = sortList(head);
Node *p = head;
while (p != NULL) {
printf("%s ", p->str);
p = p->next;
}
printf("\n");
return 0;
}
```
这个函数的实现思路是,使用冒泡排序的方法,对链表中的每个节点进行比较,如果前一个节点的字符串大于后一个节点的字符串,则交换它们的位置。最后返回排好序的链表的头节点。
阅读全文