kuuga 发表于 2016-3-26 22:01:51

关于链表插入的问题

小甲鱼老师说操作结果是在第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个元素之前
求解答

ryxcaixia 发表于 2016-3-26 22:01:52

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

ryxcaixia 发表于 2016-3-27 12:09:09

正解

kuuga 发表于 2016-3-27 22:03:59

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

如果链表带有头结点的话,头结点后面一个节点才是第一个节点的话这样写就是对的

jzh823 发表于 2016-3-29 08:57:42

要放在插入节点的前面一个。
页: [1]
查看完整版本: 关于链表插入的问题