- 论坛徽章:
- 11
|
本帖最后由 superwujc 于 2013-11-05 15:49 编辑
定义:- #define OK 1
- #define ERROR 0
- typedef int Status;
- typedef int ElemType;
- typedef struct Node
- {
- ElemType data;
- struct Node *next;
- }Node, *LinkList;
复制代码 在指定位置(位序为i)插入元素节点e:- Status ListInsert(LinkList *L,int i,ElemType e)
- {
- int j = 1;
- LinkList p,s;
- p = *L;
- 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;
- }
复制代码 删除指定位置(位序为i)的元素节点,将被删除的数据值返回到指针变量e指向的空间:- Status ListDelete(LinkList *L,int i,ElemType *e)
- {
- int j = 1;
- LinkList p,q;
- p = *L;
- while (p->next && j < i)
- {
- p = p->next;
- ++j;
- }
- if (!(p->next) || j > i)
- return ERROR;
- q = p->next;
- p->next = q->next;
- *e = q->data;
- free(q);
- return OK;
- }
复制代码 小弟不明白为什么插入操作中的遍历循环写法为:,而删除操作中的遍历循环写法为:从字面上看,二者判断指针非NULL开始的节点并不相同,一个从节点p开始,而另一个从p的后继节点p->next开始,不明白这里是为什么
网上有些资料中讲到,貌似从p开始判断指针非NULL时,p是指向头结点的,而从p->next开始判断指针非NULL时,p是指向链表的第1个元素节点的(首元节点)
但是从哪里可以得知一个链表到底是否使用了头节点呢?求指教,谢谢。
小弟初学数据结构和算法,过程比较郁闷,苦于无人请教,遇到问题只得埋头看书,然后google之
之前发过几次相关的帖子均无回应,貌似问题太低级,没办法呀,google无果,只好又回来请教各位了 |
|