在有序链表中插入数据求助
在有序链表中插入数据 给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。
输入格式:
输入有两行: 第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。 第二行是要插入的数。
输出格式:
输出插入后的链表数据,以空格分开。行末不能有多余的空格。
输入样例1:
在这里给出一组输入。例如:
5 1 3 6 9 11
4
输出样例1:
在这里给出相应的输出。例如:
1 3 4 6 9 11
**********为啥有错,是空串的话要怎么写,谢谢了,急需*************
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
void InsertList(struct node *head, int n, int x)
{
struct node *p;
p = head;
if (p->next == NULL)
{
struct node *q = (struct node *)malloc(sizeof(struct node));
head = q;
q->data = x;
/*q->next = NULL;
p->next = q;
p = q;*/
//q->data = x;
q->next = NULL;
return;
}
while (p->next != NULL)
{
struct node *temp = p;
p = p->next;
if (p->data == x)
{
return;
}
if (p->data > x)
{
struct node *q = (struct node *)malloc(sizeof(struct node));
q->data = x;
q->next = p;
temp->next = q;
return;
}
}
struct node *q = (struct node *)malloc(sizeof(struct node));
q->data = x;
q->next = NULL;
p->next = q;
p = q;
return;
}
int main()
{
struct node *head,*p,*q,*t;
int i, n, a;
scanf("%d", &n);
head = NULL; //头指针为空
for (i = 0; i < n; i++){//读入n个数
scanf("%d", &a);
//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p = (struct node *)malloc(sizeof(struct node));
p -> data = a;//将数据存储到当前结点的data域中
p -> next = NULL;//设置当前结点的后继指针指向为空,也就是当前结点的下一个结点为空
if (head == NULL){
head = p;//如果这是第一个结点,则将头指针指向这个结点
}
else {
q->next = p;//如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
}
q = p;//指针q也指向当前结点
}
scanf("%d", &a);
InsertList(head, n, a);
t = head;
while (t != NULL){
printf("%d", t->data);
if(t->next != NULL)
{
printf(" ");
}
t = t->next;
}
return 0;
}