在双向链表指针p的指针前 在双向循环链表中在p所指

8558℃
在双向链表指针 p 指向结点前插入一个指针 q 指向结点的 4 个操作中.

选B 先假设操作是想在p-1,p两个节点之间插入q节点.此时二者有如下关系: p-1->next指向节点p p->prior指向节点p-1 如果先进行B操作,即将p的前向指针指向指向q节点,而此时节点关系变为: p-1->next指向节点p p->prior指向节点q 而p-1节点的地址信息原本是由p->prior保存的,先进行B操作,即将q的地址赋给p->prior,会导致p-1节点的地址信息丢失,后续q插入后,无法做到q->prior指向p-1

在双向链表指针p的指针前 在双向循环链表中在p所指

双向链表指针P的节点前插入一个指针q的节点操作是什么?

lz的这个问题是一个很容易让人迷糊的问题.我来解释一下:struct node { struct node* prev; struct node* next; }*p, *q;// 这里指针p和q的赋值操作省去 q->prev = p->prev; // -- 1 q->next = p; // -- 2 p->prev->next = q; // -- 3 p->prev = q; // -- 4 这里因为没有存下p的前一个指针,所以有顺序要求:1. 语句4必须在1和3之后.(因为4中将p->prev赋新值之后,就无法得到原来p前的那个节点,所以这句留在最后)2. 其他顺序任意.

1.在循环双向链表中在指针p所指结点前插入一个结点*s的语句,空格处.

选b s->next=p->next; //先让s->next指向p->next p->next=s;//然后再将s设置为p的后继结点 若先做p->next=s,那么p原来的后继结点就没办法找到了,链表被断开

在双向循环链表(L为头指针)中,指针p所指结点为第一个元素结点的条.

C,D L->next==p,说明头结点下一个节点是p,既p是第一个节点.p->prior==L,说明p的上一个节点是L.

在一个双向链表指针p所指的节点之前插入一个新节点时,其时间复杂度为

O(1)

.在双向链表存储结构中,删除p所指的结点的前趋结点(若存在)时需修改.

①p->llink->llink->rlink=p; ②p->link=p->llink->llink; 说明:要想删除结点p的前趋结点,就要找到结点p的前趋结点的前趋结点q,这里为了方便说明,我叫它为结点q;p结点的前趋结点的前趋结点为:p->llink->llink,即q=p->llink->llink ①将q的后趋指向p ②将p的前趋指向q

在一个单链表中由指针p所指向的结点之前插入一个由指针s所指向的结.

s->next = p->next ; p->next = s; t = p->data; p->data =s->data; s->data =t;

4.在双向循环链表中, 在p所指的结点之后插入s 指针所指的结点, 其操.

A就是正确的, 让P的后指针指向S,让S的前指针等于P,也就是指向P所指的结点. 然后让P的后指针所指的结点(也就是P后边的那个结点)的前指针指向S,让S的后指针等于P的后指针, 这样就把S所指向的结点插到P所指向的结点后边了, 画个图就好理解了,把P和P后边的结点,还有S都画出来,按照语句挪一下指针就明白了.

带头指针L的双向循环链表中,指针p指向双向循环链表的尾结点的条件是

C. L为头指针,即L指向最开头那个节点,因为是循环链表,所以尾结点必然是头结点前一个节点. 这样应该有这样的关系: 尾结点->头结点.又因为链表是双向的,所以头结点应该有指向尾结点的指针,即:尾结点<-头结点.如果P指向尾结点,则有P->next == L,而L->prior(这是L指向上一个节点的指针)==P.所以选C.

在单链表,双链表和单循环链表中,若仅知道指针p指向某结点,不知道头.

要达到这个目标,各种链表的要求不同 如果是单链表,那么你必须知道一个在p前面的结点.如果不知道就只能免谈了.如果是双链表和单循环链表则只要知道任意一个结点就可以了、 时间复杂度全是o(n)