鱼C论坛

 找回密码
 立即注册
查看: 1641|回复: 5

指针移动 单链表

[复制链接]
发表于 2014-11-28 16:24:35 | 显示全部楼层 |阅读模式

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

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

x
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个 到底那里错了???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-28 22:28:06 | 显示全部楼层
因为你这个程序的单链表有头结点,所以 p = L 指向的是头结点(头结点不能算,只是用来表示单链表的表头,跟第一个结点是有区别的),p移动4次后是指向第4个,p->next=p->next->next删除第5个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-29 00:40:21 | 显示全部楼层
这个程序是用来做什么的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-29 10:40:47 | 显示全部楼层
风之残月 发表于 2014-11-28 22:28
因为你这个程序的单链表有头结点,所以 p = L 指向的是头结点(头结点不能算,只是用来表示单链表的表头, ...

怎么看出是有头结点呀
还有那个头结点指的是什么呀 不就是第一个结构体中数据域的地址吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-29 13:29:20 | 显示全部楼层
你程序的注释里面都写了带头结点的单链表.
头结点只是表示这个链表的开始,头结点并没有什么实际上的值,仅仅让你指针跳你的指针能跳回来,然后便于遍历链表.
你问题里面的说的应该L就是指向头结点的,然后你应该是从头结点走了四次,p所指的位置应该是链表的第5个节点(包括头结点的话,不包括头结点就是第4个),包不包括头结点你自己怎么算的就对应各自的情况了,删除指令删除的是你p指针指向的那个节点后面的一个节点.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-29 19:33:19 | 显示全部楼层
woaini92887 发表于 2014-11-29 10:40
怎么看出是有头结点呀
还有那个头结点指的是什么呀 不就是第一个结构体中数据域的地址吗

因为你的代码里有“// 在带头结点的单链线性表L的第i个元素之前插入元素e”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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