题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
解答:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
if(l1->val < l2->val){
l1->next = mergeTwoLists(l1->next,l2);
return l1;
}else{
l2->next = mergeTwoLists(l1,l2->next);
return l2;
}
}
int addNode(struct ListNode ** list,int val)
{
struct ListNode *pstNode = NULL;
struct ListNode *pstTmp = NULL;
pstNode = malloc(sizeof(struct ListNode));
if (pstNode == NULL)
return 0;
pstNode->val = val;
pstNode->next = NULL;
if (*list == NULL)
*list = pstNode;
else
{
pstTmp = *list;
while(pstTmp->next != NULL)
{
pstTmp = pstTmp->next;
}
pstTmp->next = pstNode;
}
return 0;
}
int main()
{
struct ListNode *l1 = NULL;
struct ListNode *l2 = NULL;
struct ListNode *l = NULL;
struct ListNode *pst = NULL;
addNode(&l1,1);
addNode(&l1,2);
addNode(&l1,4);
addNode(&l2,2);
addNode(&l2,3);
addNode(&l2,4);
l = mergeTwoLists(l1,l2);
printf("\n l is:");
while(l != NULL)
{
printf("%d ",l->val);
l = l->next;
}
}