题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
详细信息可以去官网进行查看
C
思路分析
因为之前作用两数相加的类似题目,那么我想能不能使用一样的循环方式来解决这个问题。在循环时,由于提示说明val最大是100,那么如果为空值时,我就将值设为101,这样就不会出现多余的问题。
代码实现
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode* L = NULL, * t;
while(l1!=NULL || l2!=NULL){
int n1, n2, n;
// 判断val里是否有值,没有值就设置为101
n1 = l1 ? l1->val : 101;
n2 = l2 ? l2->val : 101;
// 如果n2更小
if(n1>n2){
n = n2;
// 移动l2到下一位,l1不变
if(l2){
l2 = l2->next;
}
}
//如果n1小于等于n2
else{
n = n1;
// 移动l1到下一位,l2不变
if(l1){
l1 = l1->next;
}
}
if(L == NULL) {
L = (struct ListNode*)malloc(sizeof(struct ListNode));
L->val = n;
L->next = NULL;
t = L;
}
else{
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
t->next = head;
head->val = n;
head->next = NULL;
t = head;
}
}
return L;
}
结果
就这样吧
进阶版
我是秃头小宝贝…