已知L是有头结点的单链表,且p结点既不是首元结点,也不是尾结点,试写出实现下列功能的语句序列。 (1)在p结点后插入s结点; (2)在p结点前插入s结点; (3)在表首插入 s结点; (4)在表尾插入s结点。
时间: 2024-11-22 19:45:19 浏览: 16
数据结构1800题(含详解答案)
(1) 在 p 结点后插入 s 结点的语句序列可以这样编写:
```c++
// 假设 s 的 next 指针尚未初始化
struct ListNode *nextNode = p->next;
p->next = s; // 将 s 的 next 设置为 p 的当前 next
s->next = nextNode; // s 节点的 next 设为原来的 next 节点
```
(2) 在 p 结点前插入 s 结点的语句序列:
```c++
// 假设已有一个指向 p 前一个节点的指针 prevNode
if (prevNode != NULL) {
prevNode->next = s; // 将 s 插入到 prevNode 和 p 之间
}
s->next = p; // s 的 next 然后指向 p
```
(3) 在表首插入 s 结点:
```c++
if (head != NULL) { // 首先判断链表是否为空
s->next = head; // 新节点 s 接在原头节点之后
}
head = s; // 更新头节点为新节点
```
(4) 在表尾插入 s 结点:
```c++
struct ListNode *temp = head;
while (temp->next != NULL) { // 找到最后一个元素
temp = temp->next;
}
temp->next = s; // s 的 next 置为最后一个元素的 next
```
阅读全文