用c语言实现下列任务1.建立两个递增有序链表2.输出两个链表合并前的结果3.将两个链表合并,并保持递增有序4.输出合并前的结果
时间: 2024-10-12 11:17:20 浏览: 27
pta题库答案c语言之线性结构1两个有序链表序列的合并.zip
在 C 语言中,我们可以使用结构体(struct)和指针来实现这两个链表的操作:
首先,定义一个链表节点结构体:
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
```
1. **建立两个递增有序链表**:
创建链表并添加元素,确保它们都是递增排序:
```c
void create_sorted_lists(ListNode** list1, ListNode** list2) {
*list1 = NULL;
*list2 = NULL;
// 假设你要手动输入数据并添加到链表
// 这里仅给出示例,实际操作需要处理用户输入
for (int i = 5; i >= 1; i--) { // 示例:从5开始向下
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->data = i;
node->next = *list1;
*list1 = node;
}
// 对于第二个链表,可以有另一种顺序或其他数据源
}
```
2. **输出两个链表合并前的结果**:
遍历每个链表分别打印数据:
```c
void print_list(ListNode* list) {
while (list != NULL) {
printf("%d ", list->data);
list = list->next;
}
printf("\n");
}
// 调用函数分别输出两个链表
print_list(*list1);
print_list(*list2);
```
3. **将两个链表合并,并保持递增有序**:
合并两个链表,这里假设`*list1`总是比`*list2`小:
```c
void merge_sorted_lists(ListNode** list1, ListNode** list2, ListNode** result) {
*result = *list1;
if (*list2 != NULL && *list1 != NULL && (*list1)->data > (*list2)->data) {
ListNode* temp = *list1;
*list1 = (*list1)->next;
temp->next = *list2;
*list2 = temp->next;
} else if (*list2 != NULL) {
*list1 = *list2;
}
}
// 调用合并后的列表
ListNode* mergedList = NULL;
merge_sorted_lists(&*list1, &*list2, &mergedList);
```
4. **输出合并前的结果**:
同上,调用`print_list`函数输出合并后的结果。
阅读全文