题目
在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )A. s.next=p+1; p.next=s;B. p.next=s; p.next=p.next;C. s.next=p.next; p.next=s.next;D. s.next=p.next; p.next=s;
在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )
A. s.next=p+1; p.next=s;
B. p.next=s; p.next=p.next;
C. s.next=p.next; p.next=s.next;
D. s.next=p.next; p.next=s;
题目解答
答案
D. s.next=p.next; p.next=s;
解析
考查要点:本题主要考查单链表中节点插入操作的指针操作逻辑,需要理解单链表的存储结构及插入操作的正确步骤。
解题核心思路:
在单链表中插入节点时,必须确保原链表的连续性不被破坏。具体步骤为:
- 保存原p节点的后继节点(即p.next),避免插入后丢失后续节点。
- 将p节点的next指针指向新节点s,完成插入。
- 将s节点的next指针指向原p的后继节点,保证链表连续。
破题关键点:
- 选项D的两步操作顺序正确:先保存原后继节点,再调整指针指向。
- 其他选项因指针操作顺序错误或逻辑混乱会导致链表断裂或插入失败。
选项分析
选项D
s.next = p.next; p.next = s;
- 第一步:
s.next = p.next将s节点的next指针指向p原后继节点,保存链表后续部分。 - 第二步:
p.next = s将p节点的next指针指向s节点,完成插入。- 此时链表结构变为:p → s → 原后继节点,操作正确。
其他选项错误原因
- 选项A:
s.next = p+1错误。p+1是p节点的下一个内存地址,但单链表节点存储是不连续的,无法正确指向后续节点。 - 选项B:
p.next = s; p.next = p.next第二步重复赋值,实际等价于p.next = s,无法正确插入。 - 选项C:
p.next = s.next直接将p的next指向原后继节点,导致s未被插入,链表断裂。