本题实现链表的有序构造(建议使用加监督元链表实现),输出表中所有元素。
函数接口定义:
ptr creat( );//构造链表
void output(ptr p);//输出链表元素
其中 p
是用户传入的参数。creat函数返回链表的头指针,输入在creat函数中输入,以0表示输入结束。output函数输出链表元素,以一个空格隔开
裁判测试程序样例:
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}snode,*ptr;
ptr creat( );//构造链表
void output(ptr p);//输出链表元素
int main()
{
ptr head;
head=creat();
output(head);
return 0;
}
/* 请在这里填写答案 */
输入样例:
2 1 3 0
输出样例:
1 2 3
代码实现:
ptr creat() {
ptr q = NULL, head = NULL, val = NULL;
int x;
scanf("%d", &x);
while (x != 0) {
val = (ptr)malloc(sizeof(snode));
val->data = x;
val->next = NULL;
if (head == NULL) {
head = val;
q = head;
} else {
ptr prev = NULL;
q = head;
while (q != NULL && q->data < x) {
prev = q;
q = q->next;
}
if (prev == NULL) {
// 新节点是头节点 要放在头结点的位置,他最小
val->next = head; //表头插入法
head = val;
} else {
// 在 prev 和 q 之间插入新节点
val->next = q;
prev->next = val;
}
}
scanf("%d", &x);
}
return head;
}
void output(ptr p) {
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}