小白博主,浅浅记录一下链表的插入(插入后序列保持不变)
//PTA 浙大版《数据结构(第2版)》习题2.4 递增的整数序列链表的插入
List Insert( List L, ElementType X ){
//“L是给定的带头结点的单链表”意思是L自带了一个什么都不存的头结点,
//所以数据是从L->Next开始的
ElementType flag;
List p,head,q;//q为等待创建的新结点 p始终为L的下一个结点
p=head=q=NULL;
head=L;//保留头结点地址
p=L->Next;
while(p!=NULL){//为空代表已经走到最后一个元素了
if(p->Data>X){//p找到了第一个大于插入数的位置
q=(List)malloc(sizeof(struct Node));
q->Data=X;
q->Next=p;
L->Next=q;
return head;//插入后直接退出
}
L=p;//让L也移动,类似于双指针的思路
p=p->Next;
}
if(p==NULL){//如果p为空了,证明插入在尾部或者头部
q=(List)malloc(sizeof(struct Node));
q->Data=X;
q->Next=p;
L->Next=q;
return head;
}
}