在一个长度大于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: p->next=s->next;s->next=p C: q->next=s;s->next=p D: p->next=s;s->next=q
- 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q所指结点和p所指结点之间插入s所指结点,则执行()。 A: p->next=s;s->next=q; B: q->next=s;s->next=p; C: p->next=s->next;s->next=p; D: s->next=p->next;p->next=s;
- 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B间插入结点X的操作序列为( )。 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分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( )。 A: p->next=s->next;s->next=q; B: s->next=q;p->next=s->next; C: s->next=p;q->next=s->next; D: q->next=s->next;s->next=p;
- 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被嵌入的结点X,则在结点A和结点B嵌入结点X的操作序列为() 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