3.设指针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;
A选项是哪个结点后插入一个结点
B
A实现的是将s节点插入p节点之后
选择B.
首先q-> next = s;断开了A和B的链接,将A与X连接
然后s->next = p;将X和B连接起来。就完成了操作。
首先需要明确单链表的结构,由于是单向链表,所以在插入结点X之前需要先找到结点A,然后将结点A的next指针指向结点X,结点X的next指针指向结点B,具体的操作序列如下:
Node cur = head;
while (cur != null && cur.val != A) {
cur = cur.next;
}
if (cur == null) {
// 结点A不存在,插入失败
return;
}
Node newNode = new Node(X);
newNode.next = cur.next;
cur.next = newNode;
四个选项中的操作序列可以具体解释为: - 操作序列A:先找到结点A,然后将结点X的next指针指向结点B,最后将结点A的next指针指向结点X; - 操作序列B:先找到结点A,然后将结点A的next指针指向结点X,最后将结点X的next指针指向结点B; - 操作序列C:先找到结点B,然后将结点X的next指针指向结点B,最后将结点A的next指针指向结点X; - 操作序列D:先找到结点B,然后将结点A的next指针指向结点X,最后将结点X的next指针指向结点B。
其中操作序列A和B是等效的,操作序列C和D也是等效的,因为插入结点其实只需要确定前驱和后继节点,而不需要事先确定插入位置的具体名称。