求助!数据结构单链表插值问题。求各位给讲一下!谢谢了

小_磊_哥 2015-03-13 09:54:30
Status ListInsert(LinkList L,int i,ElemType e) // 在带头结点的单链线性表 L中第 i个位置之前插入元素 e
{
int j=0;
LinkList p=L,s;
while(p&&j<i-1) // 寻找第 i-1个结点
{
p=p->next;
j++;
}

if(!p||j>i-1) // i小于 1或者大于表长
return ERROR;
s=(LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data=e; // 插入 L中
s->next=p->next;
p->next=s;
return OK;
}
想问一下红色部分!假设我的主函数在调用ListInsert()之前,只调用了了初始化单链表函数,即只是新建了一个空的单链表!那么while里的判断,第一次p为L,即头结点的地址,为非空;因为是空链表,因此只有一个头结点,那么第二次循环时P的值不是应该是空的吗?还怎么能向空的链表中插入新的结点?求各位给讲一下!谢谢了
...全文
184 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小_磊_哥 2015-03-14
  • 打赏
  • 举报
回复
多谢各位的回复!
一根烂笔头 2015-03-14
  • 打赏
  • 举报
回复
while循环后还有第3种情况 p != NULL; j >= i -1; i = 1,认为是有效的,直接在表头后插入元素 i <= 0,导致0 > i - 1,有if返回错误
一根烂笔头 2015-03-14
  • 打赏
  • 举报
回复

Status ListInsert(LinkList L,int i,ElemType e)  // 在带头结点的单链线性表 L中第 i个位置之前插入元素 e
{
	int j=0;
	LinkList p=L,s;//p指向头结点
	while(p&&j<i-1) // 寻找第 i-1个结点
	{
		p=p->next;
		j++;//位置计数器
	}
	/*执行到这里有2种情况
		1.p=NULL;j <= i - 1;->表太短,要求的位置靠后
		2.p != NULL; j = i -1;->插入位置在表中
	*/
	if(!p||j>i-1) //处理第1种情况,并处理i <= 0的无效输入
		return ERROR;

	//分配结点并初始化成员
	s=(LinkList)malloc(sizeof(LNode)); 
	s->data=e; 

	//入表
	s->next=p->next;
	p->next=s;

	return OK;
}
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
Status ListInsert(LinkList L,int i,ElemType e) // 在带头结点的单链线性表 L中第 i个位置之前插入元素 e { int j=0; LinkList p=L,s; 这道题归根结底是考察指针的使用。不管是谁,要是做这题时,在函数内部声明了多于一个的LinkList变量,做这题就失去了意义。这道题中的j也是多余的。
jiht594 2015-03-13
  • 打赏
  • 举报
回复
你说的对啊 L中第 i个位置之前插入元素 e. 你说的情况有0个元素, ListInsert时, 第2个参数i只能是0. 如果是1, 就是要在第1个元素前插入e, 但是你一个元素都没有啊 所以才有这句, p!的时候返回ERROR if(!p||j>i-1) // i小于 1或者大于表长 return ERROR;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧