在双向循环链表里,到底怎么判断一个它->到底是什么意思,比如所下面这段程序里p->prior->next是什么意思
如下:
void Double Elem(Dulinklist *p ,DataTypr *x)
{ *x=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p); }
这里p->prior->next到底指的是什么意思,如果说是p->prior是指前一个指针的话,那么p->next那么这个为啥就又是指回来了
如果你的程序正确,符合逻辑,那么prior的next指向p。
p->prior->next=p->next;
p->next->prior=p->prior;
的意思是让p的前驱的后驱指向p的后驱(原先指向p,现在跳过p)
让p的后驱的前驱指向p的前驱,也是跳过p
从而可以从双链表中删除p
找个好理解的角度,比如可以这样想:当一个指针后面没有->时,就把他当做单纯的指针,当他后面有->时,就把他当做实体。比如p单独存在,
他就是个4B的指针,对p->prior,p后面有->,所以把p当做实体并取出它的prior指针,对p->prior->next,把p->prior当做实体,取出实体中的
next指针,next后面没了,所以,p->prior->next就是前驱结点中的那个next指针变量,并不代表当前结点的实体,p->next就是单纯的当前节点中
的那个next指针变量,p->prior->next = p->next; 就是把当前结点的next指针变量附给了前驱结点中的next指针变量。
不知道讲的明白吗。
p->prior->next=p->next;
主要语法是赋值语句, 所以指回来了的说法是不对的
比如两个元素A ,B, 假设操作对象是B
p->prior->next=p->next;
这个语句可以分解为
A=p->prior;
A->next=p->next; 实际是对A的属性赋值