已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点。回答下题
1、在P结点后插入S结点的语句序列是
s->next = p->next;//1
p->next = s;//2
如下图所示

2、在P结点前插入S结点的语句序列是
(1)循序交换数据的情况
- 先在P结点之后插入S结点
- 定义一个中间变量将S和P的数据交换
s->next = p->next;
p->next = s;
ElemType tmp = s->data;
s->data = p->data;
p->data = tmp;
(2)不允许交换数据
单链表不能回退,不能获取到P之前的结点,但是我们又得找到P结点之前的结点
Q = P;
P = L;
while(P->next != Q)
{
P = P->next;
}
s->next = Q;//s->next = p->next
P->next = s;
如下图所示:

3、在表首插入S结点的语句序列是
(1)链表中有数据时
s->next = L;
L = s;
如下图所示:

(2)链表中无数据时
通过分析,我们发现上面的代码也能处理我们边界的问题。所以链表中无数据时代码依然是
s->next = L;
L = s;
如下图所示:

4、在表尾插入S结点的语句序列是
(1)链表中有数据
P = L;
while(P->next != NULL)
{
P = P->next;
}
s->next = P->next;
P->next = s;
如下图所示:

(2)链表中无元素时
s->next = L;
L = s;
如下图所示:

3904




被折叠的 条评论
为什么被折叠?



