题目描述
给定一个递增整数序列和某个整数M,构造出此递增序列对应的链表,并创建以M为值的新结点插入到链表中,使其结果序列依然保持递增顺序。
输入
每个输入包含一个测试用例,第1行包含原序列长度N(任意long int范围内的正整数)与待插入的整数M;第2行包含N个递增的整数代表原递增数列。
输出
根据此递增数列,构造出此递增链表,然后将M插入到链表中,输出插入后的链表对应的数列。数字间隔一个空格,但末尾不能有空格。
样例输入
6 2
-10 -3 1 5 9 30
样例输出
-10 -3 1 2 5 9 30
本题很忌讳使用两个指针同时指向同一动态内存的做法,如下:
void InsNode(LinkList PHead,DataType data)
{
Node *p;
Node *s;
Node *q;
p=PHead;
q=PHead; //此处p和q同时指向链表头结点,从思维上来说感觉没问题
p=p->Next; //这样很容易产生误导,实际上这样做会出现一个严重问题
while(p->Next!=NULL&&p->Data<data)
{
//两个指针变量如果指向同一动态内存,一个指针结束生命期释放内存
p=p->Next;//另一指针所指地址虽被释放,但该指针不等于NULL而是随机值
q = q->Next;//此举十分容易引发野指针,导致内存破坏
}
if (p->Data > data)
{
s=(Node*)malloc(