在一个长度大于2的单循环链表L中,P指针指向某结点,在P前插入S结点,要求在O(1)时间复杂度内完成,以下正确的是( )。
A: s->next=p->next;p->next=s; //将s结点插入到p之后t=s->data;s->data=p->data;p->data; //s结点和p结点的值互换
B: q=p->next;while(q->next!=p) q=q->next;s->next=p; q->next=s;
C: q=p->next;while(q->next!=p) q=q->next;q->next=s; s->next=p;
D: 在p结点前插入s结点,而且要求在O(1)内,无法实现。
A: s->next=p->next;p->next=s; //将s结点插入到p之后t=s->data;s->data=p->data;p->data; //s结点和p结点的值互换
B: q=p->next;while(q->next!=p) q=q->next;s->next=p; q->next=s;
C: q=p->next;while(q->next!=p) q=q->next;q->next=s; s->next=p;
D: 在p结点前插入s结点,而且要求在O(1)内,无法实现。
举一反三
- 在一个单链表中,已知 q 是 p 的前趋结点,若在 q 和 p 之间插入结点 s ,则应当执行语句序列( )。 A: s -> next = p -> next; p -> next = s; B: s -> next = q -> next; p -> next = s; C: s -> next = q -> next; q -> next = s; D: q -> next = s; s -> next = p;
- 若已建立以下链表结构,指针p、s分别指向如图所示结点。 则不能将s所指结点插入到链表末尾的语句组是______。 A: p=p->next; s ->next=p; p->next=s; B: s ->next='\0'; p=p->next; p->next=s; C: p=p->next; s ->next=p->next; p->next=s; D: p=(*p).next; (*s ).next=(*p).next; (*p).next=s;
- 在一个链表中,要把s所指的一个结点插入到p所指的一个结点后面去,正确的语句是: A: s->next=p->next; p->next=s; B: s->next=p; p->next=s; C: s->next=p¬->next; p=s; D: p->next=s; s->next=p;
- 在一个单链表中,已知*q节点是*p节点的前驱节点,若*q和*p 之间插入*s 节点,则需执行( )。 A: s->next=p->next; p->next=s; B: q->next=s; s->next=p; C: p->next=s->next; s->next=p; D: p->next=s; s->next=q;
- 在一个双链表中,在P结点之后插入结点q的操作是()。 A: q->prior=p; p->next=q; p->next->prior=q;q->next=p->next; B: q->next=p->next; p->next->prior=q;p->next=q;q->prior=p; C: p->next=q;q->prior=p;q->next=p->next;p->next->prior=q; D: q->prior=p;p->next=q;q->next=p->next;p->next->prior=q;