pta题库答案c语言线性表的合并
时间: 2024-10-21 13:09:30 浏览: 35
在C语言中,合并两个已排序的线性表(如数组或链表)通常涉及到两层操作:遍历和合并。这里我们可以假设这两个线性表都是递增排列的。以下是合并它们的一种基本算法:
**合并过程:**
1. 定义一个新的空线性表用于存储合并后的结果。
2. 创建两个指针,分别指向第一个输入列表的起始位置(`p1`)和第二个输入列表的起始位置(`p2`),以及新的合并列表的起始位置(`pMerge`)。
3. 比较两个指针所指向的元素,将较小的那个元素添加到合并列表,并移动该指针。如果`p1`指向的元素小于`p2`,则将`p1`指向的元素复制到`pMerge`并递增`p1`;反之,则将`p2`指向的元素复制到`pMerge`并递增`p2`。
4. 当其中一个列表遍历完时,将另一个未遍历完的列表剩余部分直接复制到合并列表中。
5. 返回合并后的列表。
**示例代码(链表版本):**
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
```
在这个例子中,`mergeTwoLists`函数是一个递归函数,它会一直比较并合并直到两个链表都遍历完毕。
**
阅读全文