题目
Solution:
创建一个指针来保存结果,然后这个指针链表把lists链表中每个数组依次相加并排列到链表中,mergeTwoLists函数怎么来的可以观看这篇文章合并两个有序链表
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
struct ListNode *head = NULL, **phead = &head ;
while (list1 && list2)
{
if (list1->val < list2->val)
{
*phead = list1;
list1 = list1->next;
}
else
{
*phead = list2;
list2 = list2->next;
}
phead = &(*phead )->next; //(*phead )->next是保存数据的节点的下一个地址,方便phead不断指向下一个地址,不断遍历
}
*phead = list1 ? list1 : list2;
return head;//这里直接返回它的地址,因为head存储了数据
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) {
int i;
struct ListNode* result=NULL;
for(i=0; i<listsSize; i++)
{
result = mergeTwoLists(result,lists[i]);
}
return result;
}