指针移动问题 链表
Status ListInsert_L(LinkList &L, int i, ElemType e) {// 算法2.9// 在带头结点的单链线性表L的第i个元素之前插入元素e
LinkList p,s;
p = L;
int j = 1;
while (p && j < i) {// 寻找第i个结点
p = p->next;
++j;
}
if (!p || j > i-1) return ERROR; // i小于1或者大于表长
s = (LinkList)malloc(sizeof(LNode));// 生成新结点
s->data = e;s->next = p->next; // 插入L中
p->next = s;
return OK;
} // LinstInsert_L
这里面的指针P 移动了4次 最后指向那呀
假如有 10个这样的结构体用单链表连接
我想撤掉i=5
按理说第一个p=L 的时候 是指向第一个 然后经过4次 指向第5个 ,那么经过p->next=p->next->next 的时候撤除的是第6个 到底那里错了??? 激动人
心无法言表 没有错啊,p=L 的时候 是指向第一个 然后经过4次 指向第5个 ,那么p 指向第五个,p-next 指向第6个,p->next->next 指向第7个,把第7个p->next->next 链接到p->next 第六个位置, 那删除的不就是第6个元素? 不会啊。。 链表的第一个是头指针,就是P=L的时候,指向的是链表的头指针 雪是梅之香 发表于 2015-1-17 10:18
链表的第一个是头指针,就是P=L的时候,指向的是链表的头指针
能否问一下,假设i=3,将头结点的位置记为0,第一个节点位置记为1,以此类推。
当下面这个循环开始时,p指向0,j=1;结束时,p指向2,j=3.对吗?
while (p && j < i) {// 寻找第i个结点
p = p->next;
++j;
}
则p->next为第2个结点的指针域上的指针,指向第3个结点,
所以让s也指向第三结点的代码就是s->next = p->next;
这样理解对吗? justoy 发表于 2015-1-18 10:46
能否问一下,假设i=3,将头结点的位置记为0,第一个节点位置记为1,以此类推。
当下面这个循环开始时, ...
恩,是这样的 雪是梅之香 发表于 2015-1-18 10:56
恩,是这样的
多谢 学习一下
只能帮顶了
页:
[1]