回 帖 发 新 帖 刷新版面

主题:[讨论]问题????急

[em1]
Status CreatDescend(LinkList &L,int n)
 { // 按非升序建立n个元素的线性表
   int j;
   LinkList p,q,s;
   if(n<=0)
     return ERROR;
   InitList(L);
   printf("请输入%d个元素:\n",n);
   s=(LinkList)malloc(sizeof(LNode)); // 第一个结点
   scanf("%d",&s->data);
   s->next=NULL;
   L->next=s;
   for(j=1;j<n;j++)
   {
     s=(LinkList)malloc(sizeof(LNode)); // 其余结点
     scanf("%d",&s->data);
     q=L;
     p=L->next;
     while(p&&p->data>s->data) // p没到表尾,且所指元素值大于新值
     {
       q=p;
       p=p->next; // 指针后移
     }
     s->next=q->next; // 元素插在q的后面
     q->next=s;
   }
   return OK;
 }
这段代码尤其是以下部分:
 while(p&&p->data>s->data) // p没到表尾,且所指元素值大于新值
     {
       q=p;
       p=p->next; // 指针后移
     }
当他建好第一个接点时,在建第二个接点,那么p向后无法移动,因为第二个接点和第一个接点没连起来.这是不是问题呢?请教???

回复列表 (共1个回复)

沙发

建完第一个node后,q指向了L,
p = L->next,实际上就是p指向了s(第一个node),q和p此时相邻

如果进入while循环依次比较后,由于比较到表的尾部才退出,新node s则会插在表尾

否则,新node s(第二个节点)会插在q的后面p的前面,q和p此时不相邻。

再次进入for循环重新建立node,并对每个node进行比较,再插入。

楼主为什么说没连起来呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册