解法:迭代法
如果知道归并排序的话,就很容易明白这道题的做法。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
// 用哑结点dummy管理排序后的链表
struct ListNode* dummy = malloc(sizeof(struct ListNode));
dummy->next = NULL;
// temp始终指向排序链表的最后一个节点
struct ListNode* temp = dummy;
while(l1 && l2)
{
// 将小的节点加入排序后的链表
if(l1->val <= l2->val)
{
temp->next = l1;
l1 = l1->next;
}
else
{
temp->next = l2;
l2 = l2->next;
}
// temp指向新加入的节点
temp = temp->next;
}
// 如果l1,或者l2还有节点,直接加入(最多只有一个链表还有节点)
while(l1)
{
temp->next = l1;
temp = temp->next;
l1 = l1->next;
}
while(l2)
{
temp->next = l2;
temp = temp->next;
l2 = l2->next;
}
// 释放资源,避免内存泄露
temp = dummy->next;
free(dummy);
return temp;
}