鱼C论坛

 找回密码
 立即注册
查看: 3045|回复: 2

关于链表插入结点的死循环怎么解决

[复制链接]
发表于 2018-3-3 23:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
视频中留的一个课后习题,但是想不明白。。
QQ图片20180303233620.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-4 11:18:55 | 显示全部楼层
代码都没有~
我就说一点我的理解吧。。。

先抛出三个问题:

1. 要对哪一个链表进行操作
2. 链表要插入在哪个节点的前面,或者说你这个节点要插入在什么位置~
3. 插入节点的数据域的值是什么

综上所述,插入一个节点,我们至少需要三个参数

下面上代码:
bool insert (PNODE pHead, int pos, int val){

        int i = 0;
        PNODE p = pHead;
        // 这个算法我迄今为止还没搞明白
        // 但是他确实能够过滤一些意外情况。。。
        // 没搞懂就先把他背会吧。苦笑。。
        while (P != NULL && i < pos-1){
                p = p->pNext;
                i++;
        }
        
        if (i > pos-1 || p == NULL){
                return false;
        }
  //  过滤了这些意外情况!就开始造节点了~~
  PNODE pNew = (PNODE)malloc(sizeof(NODE));
  // 检查一下是否分配成功了~如果失败了,就把程序停了~
  if (pNew == NULL){
        printf ("内存分配失败~");
        exit(-1);
  }
  // 能到这,肯定就是内存分配成功了,并且过滤了意外情况,所以!开始给节点赋值!
  pNew->data = val; // 给数据域赋值~
  PNODE q = p->pNext; //下面这三步为了能让你看懂~ 还是画张图吧。。你待会去下面找图~
  p->pNext = pNew;
  pNew->pNext = q;
  
  return true;
}


PS画图果然没有coreldraw方便~ 苦笑~
图解.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 11:32:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 15:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表