题目戳这里
先放代码
List Merge( List L1, List L2)
{
List x;
x = (List)malloc(sizeof(struct Node));
List P,Q,L3;
P = L1->Next;
Q = L2->Next;
L3 = x;
while( P && Q)
{
if(P->Data <= Q->Data)
{
L3->Next = P;
L3 = P;
P = P->Next;
}
else
{
L3->Next = Q;
L3 = Q;
Q = Q->Next;
}
}
L3->Next = Q ? Q:P;
L1->Next = NULL;
L2->Next = NULL;
return x;
}
解题思路
访问L1
和L2
的每一个数据,比较当下访问的两个,然后连到指针上,直到L1
或L2
其一为空,就把指针连到不为空的那个上面去就行了
题目的一些隐蔽条件
- 返回带头结点的链表头指针
- 给的
L1
和L2
是带头指针的 - 从输出样例可以看到最后的
L1
和L2
应为NULL
对代码的一些地方的解释
也许有人会问为什么把地址分配给x
后却要用L3
去进行后面的操作,其实就是因为题目要求我们返回链表头指针,如果用x
,后续代码执行完x
变成到了尾部。L3 = x
可以让L3
和x
指向同一个地址。其他的应该没什么了,如果有应该也只是c语言相关的用法问题,直接查就行了。我因为只是初中看过一点c,现在刚开始直接学数据结构,视频里好多语句都看不懂比如指针,链表,分配地址都是边看边查边写的(逃