双向链表中有两个指针域,llink 和 rlink 分别指向前趋及后继,设 p 指向链表中的一个结点,现要 求删去 p 所指结点,
时间: 2024-01-14 19:02:58 浏览: 81
如果已知 p 指向的结点是双向链表中的唯一结点,则可以直接将 p 指向的结点释放即可。
如果 p 指向的结点不是双向链表中的唯一结点,则需要将 p 的前继结点(即 p->llink)的 rlink 指向 p 的后继结点(即 p->rlink),将 p 的后继结点的 llink 指向 p 的前继结点,最后释放 p 指向的结点即可完成删除操作。具体实现如下:
```
p->llink->rlink = p->rlink;
p->rlink->llink = p->llink;
free(p);
```
相关问题
在双向链表指针p的结点前插入一个指针q的结点操作是
双向链表的结点包含三个域:data(数据域)、prev(指向前驱结点的指针域)和next(指向后继结点的指针域)。
在双向链表指针p的结点前插入一个指针q的结点操作可以分为以下几步:
1. 创建一个新节点r,将数据存储在r->data中,将r->prev和r->next都赋值为NULL。
2. 将p的前驱结点设置为r的前驱结点,即r->prev = p->prev。
3. 将p的前驱结点的后继结点设置为r,即p->prev->next = r。
4. 将r的后继结点设置为p,即r->next = p。
5. 将p的前驱结点设置为r,即p->prev = r。
以上操作完成后,指针q所代表的结点就被成功地插入到了指针p所代表的结点的前面。
在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,修改指针的操作是?
在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,需执行以下操作:
1. 将新结点的前继指针指向p指针所指向的结点;
2. 将新结点的后继指针指向p指针的后继结点;
3. 将p指针的后继结点的前继指针指向新结点;
4. 将p指针的后继指针指向新结点。
具体实现代码如下:
```
q->prev = p;
q->next = p->next;
p->next->prev = q;
p->next = q;
```