woaini92887 发表于 2014-11-28 16:22:03

指针移动问题 链表

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个 到底那里错了???

疯子~ 发表于 2014-12-1 19:53:10

激动人
心无法言表

haovcf 发表于 2015-1-10 11:50:26

没有错啊,p=L 的时候 是指向第一个 然后经过4次 指向第5个 ,那么p 指向第五个,p-next 指向第6个,p->next->next 指向第7个,把第7个p->next->next 链接到p->next 第六个位置, 那删除的不就是第6个元素?

zjc7836 发表于 2015-1-14 19:35:37

不会啊。。

雪是梅之香 发表于 2015-1-17 10:18:02

链表的第一个是头指针,就是P=L的时候,指向的是链表的头指针

justoy 发表于 2015-1-18 10:46:09

雪是梅之香 发表于 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;
这样理解对吗?

雪是梅之香 发表于 2015-1-18 10:56:14

justoy 发表于 2015-1-18 10:46
能否问一下,假设i=3,将头结点的位置记为0,第一个节点位置记为1,以此类推。

当下面这个循环开始时, ...

恩,是这样的

justoy 发表于 2015-1-18 11:10:41

雪是梅之香 发表于 2015-1-18 10:56
恩,是这样的

多谢

zjc7836 发表于 2015-1-19 20:09:29

学习一下

zjc78361 发表于 2015-1-21 20:09:19

只能帮顶了
页: [1]
查看完整版本: 指针移动问题 链表