这样为啥不对啊

爬虫QTgl 2021-03-17 12:02:58
插入不进去
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
自信男孩 2021-03-17
  • 打赏
  • 举报
回复
贴源码吧,方便调试~
自信男孩 2021-03-17
  • 打赏
  • 举报
回复
楼主的代码只是把p的地址赋值给了q,这样q还是一个孤零零的节点。并没有插入到链表中

如果楼主要插入到链表中,需要定义另外一个节点pre,即要插入节点的前一个节点,q->next = p; pre->next = q;
赵4老师 2021-03-17
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
自信男孩 2021-03-17
  • 打赏
  • 举报
回复
引用 4 楼 qzjhjxj 的回复:
插入函数,供参考:
struct ListNode *insert(pp head,int x){
pp p,pr,q;
q=(pp)malloc(sizeof(qq));
q->data = x;
pr=head;
p=head->next;
while(p){
if(p->data >= x) {
if(p->data == x) break;
else{
q->next = pr->next;//找到了p,插在p的前面一个节点。
pr->next = q;
break;
}
}
pr = p;
p = p->next;
}
return head;
}

如果插入的点在head之前呢,这个没有考虑
另外,head一定是有效的吗?可能是NULL不?所以需要多加一些判断~

 q->next = pr->next;//找到了p,插在p的前面一个节点。
//上面这句可以改一下,改成如下:
//q->next = p; //这样会比较好理解了~否则后面的注释容易对你的q->next = pr->next产生误解~
pr->next = q;
break;
forever74 2021-03-17
  • 打赏
  • 举报
回复
嗯,作弊的方式是把新节点q放在p的后面,然后悄悄交换它俩的data
qzjhjxj 2021-03-17
  • 打赏
  • 举报
回复
插入函数,供参考:
struct ListNode *insert(pp head,int x){
     pp p,pr,q;
     q=(pp)malloc(sizeof(qq));
     q->data = x;
     pr=head;
     p=head->next;
     while(p){
           if(p->data >= x) {
              if(p->data == x) break;
              else{
                   q->next = pr->next;//找到了p,插在p的前面一个节点。
                   pr->next = q;
                   break;
              }
           }
           pr = p;
           p  = p->next;
     }
     return head;
}
qzjhjxj 2021-03-17
  • 打赏
  • 举报
回复
这里不对吧,q=(pp)malloc(sizeof(pp));

69,337

社区成员

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

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