鱼C论坛

 找回密码
 立即注册
查看: 3602|回复: 4

[已解决]关于链表插入的问题

[复制链接]
发表于 2016-3-26 22:01:51 | 显示全部楼层 |阅读模式
1鱼币
小甲鱼老师说操作结果是在第i个节点之前插入新元素
这是小甲鱼老师的 代码
/*初始条件,顺序线性表已经存在,1<=i<=ListLength(L)*/
/*操作结果,在L中第i个位置之前插入新元素e,L的长度+1*/

Status ListInsert(LinkList *L,int i,ElemType e)
{
        int j;
        LinkList p,s;

        p=*L;
        j=1;

        while(p && j<i)
        {
                p=p->next;
                j++;
        }

        if( !p || j>i)
        {
                return ERROR;
        }
        s=(LinkList)malloc(sizeof(Node));
        s-data = e;

        s->next = p->next;
        p->next = s;

        return OK;
}
我感觉应该吧while中的j<i改成j<i-1
这样才是插在第i个元素之前
求解答

最佳答案
2016-3-26 22:01:52
其实取决于 这个链表的序号i 是从0开始还是从1开始
如果头结点的数据域是个空节点(大部分链表都是这么做 表明头结点的特殊性) 那么序号就是从0开始
那么p刚好是第i个节点
s->next = p->next;
p->next = s;
这句明显就是在p的节点和p的后继节点之间 插入一个s节点
按函数说明来说 那就是第i个节点之后插入一个节点

最佳答案

查看完整内容

其实取决于 这个链表的序号i 是从0开始还是从1开始 如果头结点的数据域是个空节点(大部分链表都是这么做 表明头结点的特殊性) 那么序号就是从0开始 那么p刚好是第i个节点 s->next = p->next; p->next = s; 这句明显就是在p的节点和p的后继节点之间 插入一个s节点 按函数说明来说 那就是第i个节点之后插入一个节点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-26 22:01:52 | 显示全部楼层    本楼为最佳答案   
其实取决于 这个链表的序号i 是从0开始还是从1开始
如果头结点的数据域是个空节点(大部分链表都是这么做 表明头结点的特殊性) 那么序号就是从0开始
那么p刚好是第i个节点
s->next = p->next;
p->next = s;
这句明显就是在p的节点和p的后继节点之间 插入一个s节点
按函数说明来说 那就是第i个节点之后插入一个节点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-27 12:09:09 | 显示全部楼层
正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-27 22:03:59 | 显示全部楼层
ryxcaixia 发表于 2016-3-27 12:12
其实取决于 这个链表的序号i 是从0开始还是从1开始
如果头结点的数据域是个空节点(大部分链表都是这么做  ...

如果链表带有头结点的话,头结点后面一个节点才是第一个节点的话这样写就是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-29 08:57:42 | 显示全部楼层
要放在插入节点的前面一个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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