#include <stdlib.h>#include <stdio.h>#define N 10typedef struct list{ int data; struct list *next;} NODE;NODE *creat_list(int *a, int n){ NODE *head, *p, *q; head = (NODE *)malloc(sizeof(NODE)); head->next = NULL; q = head; for (int i = 0; i < n; i++) { p = (NODE *)malloc(sizeof(NODE)); p->data = a[i]; q->next = p; q = p; } q->next = NULL; return head;}void insNode(NODE *head, int x){ NODE *p, *q, *t; p = head; q = head->next; while (q != NULL && q->data < x) { p = q; q = q->next; } t = (NODE *)malloc(sizeof(NODE)); t->data = x; p->next = t; t->next = q;}void print(NODE *h){ NODE *p; p = h->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n");}int main(){ int i, j, x, a[N] = {1, 13, 25, 37, 9, 911, 133, 415, 147, 19}; NODE *head; head = creat_list(a, 10); scanf("%d", &x); insNode(head, x); print(head); return 0;}这个没问题吗?
时间: 2023-06-20 17:04:22 浏览: 48
这个代码的主要功能是实现将一个无序数组转化为有序链表,并能够在有序链表中插入一个新的元素,最后输出整个有序链表。代码的主要逻辑和实现方式都没有问题,但是有两个小问题需要注意:
1. 在创建链表的时候,首先要创建一个头节点,但是头节点不应该存储任何数据,因此应该将头节点的data域设为0或者其他一个无意义的值,而不是随便malloc一个节点。
2. 在插入新节点的时候,如果插入的节点比链表中所有节点的值都要小,那么新节点应该作为头节点的后继节点,而不是作为头节点本身。因此应该在while循环结束后,判断一下是否需要将新节点作为头节点的后继节点。
下面是修改后的代码:
```
#include <stdlib.h>
#include <stdio.h>
#define N 10
typedef struct list{
int data;
struct list *next;
} NODE;
NODE *creat_list(int *a, int n){
NODE *head, *p, *q;
head = (NODE *)malloc(sizeof(NODE));
head->data = 0; // 头节点不存储任何数据
head->next = NULL;
q = head;
for (int i = 0; i < n; i++)
{
p = (NODE *)malloc(sizeof(NODE));
p->data = a[i];
q->next = p;
q = p;
}
q->next = NULL;
return head;
}
void insNode(NODE *head, int x){
NODE *p, *q, *t;
p = head;
q = head->next;
while (q != NULL && q->data < x)
{
p = q;
q = q->next;
}
t = (NODE *)malloc(sizeof(NODE));
t->data = x;
p->next = t;
t->next = q;
if (head->next == NULL || x < head->next->data) {
head->next = t;
}
}
void print(NODE *h){
NODE *p;
p = h->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(){
int i, j, x, a[N] = {1, 13, 25, 37, 9, 911, 133, 415, 147, 19};
NODE *head;
head = creat_list(a, 10);
scanf("%d", &x);
insNode(head, x);
print(head);
return 0;
}
```
希望能对你有所帮助!