输出样例如图:
代码如下:
#include<stdio.h>
#include<stdlib.h>
//链表节点结构
typedefstructListNode
{
intval;
structListNode*next;
} ListNode;
// 创建新节点
ListNode* createNode(int val)
{
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表尾部
void insertTail(ListNode** head, int val)
{
ListNode* newNode = createNode(val);
if (*head == NULL)
{
*head = newNode;
}
else
{
ListNode* temp = *head;
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
}
// 释放链表内存
void freeList(ListNode* head)
{
ListNode* temp;
while (head != NULL)
{
temp = head;
head = head->next;
free(temp);
}
}
// 合并两个非递减链表为非递增链表
ListNode* mergeLists(ListNode* list1, ListNode* list2)
{
ListNode* result = NULL;
while (list1 != NULL || list2 != NULL)
{
ListNode* temp;
if (list1 == NULL)
{
temp = list2;
list2 = list2->next;
}
else if (list2 == NULL)
{
temp = list1;
list1 = list1->next;
}
else if (list1->val < list2->val)
{
temp = list1;
list1 = list1->next;
}
else
{
temp = list2;
list2 = list2->next;
}
temp->next = result;
result = temp;
}
return result;
}
// 计算链表长度
int listLength(ListNode* head)
{
int len = 0;
while (head != NULL)
{
len++;
head = head->next;
}
return len;
}
int main()
{
printf_s("230602207 侯冬明\n");
ListNode* list1 = NULL;
ListNode* list2 = NULL;
int num;
// 输入第一个链表
printf_s("输入第一个非递减单链表,以-1 结束输入:\n");
while (scanf_s("%d", &num) && num !=-1)
{
insertTail(&list1, num);
}
// 输入第二个链表
printf_s("输入第二个非递减单链表,以-1 结束输入:\n");
while (scanf_s("%d", &num) && num !=-1)
{
insertTail(&list2, num);
}
ListNode* mergedList = mergeLists(list1, list2);
int length = listLength(mergedList);
printf_s("合并后的非递增单链表为:");
ListNode* temp = mergedList;
while (temp != NULL)
{
printf("%d ", temp->val);
temp = temp->next;
}
printf_s("\n 合并后的单链表长度为:%d\n", length);
freeList(list1);
freeList(list2);
freeList(mergedList);
return 0;
}
觉得有帮助就给博主点个关注叭~~
有问题的可以私信或者在评论区一起交流
友友们一起加油叭QAQ