题解 | 合并两个排序的链表
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
#include <math.h>
int cmp(const void *a,const void* b)
{
return (*(int*)a - *(int*)b);
}
#include <stdlib.h>
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
if(!pHead1 && !pHead1)
{
return NULL;
}
if(!pHead1)
{
return pHead2;
}
if(!pHead2)
{
return pHead1;
}
struct ListNode* p1 = pHead1;
struct ListNode *p2 = pHead2;
//求出链表1和链表2的长度
int len1 = 0;
int len2 = 0;
while(p1)
{
len1++;
p1 = p1->next;
}
while (p2)
{
len2++;
p2 = p2->next;
}
//动态申请一段数组保存链表12的数据
int len = len1 + len2;
int *arr = (int*)malloc(sizeof(int) * len);
int i = 0;
p1 = pHead1;
p2 = pHead2;
for(i=0;i<len;i++)
{
if(i<len1)
{
arr[i] = p1->val;
p1 = p1->next;
}
else
{
arr[i] = p2->val;
p2 = p2->next;
}
}
//对链表重新赋值
p1 = pHead1;
p2 = pHead2;
qsort(arr, len, sizeof(int), cmp);
for(i=0;i<len;i++)
{
if(i<len1)
{
p1->val = arr[i];
p1 = p1->next;
}
else
{
p2->val = arr[i];
p2 = p2->next;
}
}
//将两个链表连接起来
p1 = pHead1;
while(p1->next)
{
p1 = p1->next;
}
p1->next = pHead2;
free(arr);
return pHead1;
}
思路:计算出两个链表的长度,然后动态申请一个数组存储两个链表的全部元素,之后用qsort函数对其进行排序。之后再赋值给链表。最后将两个链表连接起来。
注意:如果其中一个链表是空的。则直接返回另一个链表。
OPPO公司福利 1059人发布