LeetCode (力扣) 21. Merge Two Sorted Lists (C) - Easy

同步发于 JuzerTech 网站,里面有我软、硬件学习的纪录与科技产品开箱,欢迎进去观看。

此题测验的是链表 ( Linked List ) ,把两个 Linked List 依照大小排序,串接在一起,并回传串接完的 Linked List。

 

题目与范例如下

Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.

Example 1:

這張圖片的 alt 屬性值為空,它的檔案名稱為 merge_ex1.jpg


Input: l1 = [1,2,4], l2 = [1,3,4]
Output: [1,1,2,3,4,4]
Example 2:

Input: l1 = [], l2 = []
Output: []
Example 3:

Input: l1 = [], l2 = [0]
Output: [0]

Constraints:

The number of nodes in both lists is in the range [0, 50].
-100 <= Node.val <= 100
Both l1 and l2 are sorted in non-decreasing order.


 

解题策略为透过 l1 储存要回传的 Linked List,每次回圈依序比较 l1 跟 l2 的值,把 l2 的值依序连接到 l1 上,最后回传 l1。

 

下方为我的代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
    if(l1 == NULL)
        return l2;
    else if(l2 == NULL)
        return l1;
    else{
        struct ListNode *ptr,*Fptr;
	ptr = l1;
	Fptr = ptr;
	while(l2!=NULL){
	    if(ptr->val > l2->val){
		struct ListNode *temp = l2;
		l2 = temp->next;
		temp->next = ptr;
		if(ptr == l1){
		    l1 = temp;
		    Fptr = l1;
		}
		else{
                    Fptr->next = temp;
                    Fptr = temp;
                }
	    }
            else{
		if(ptr->next!=NULL){
                    if(Fptr == ptr){
                    }
                    else{
                        Fptr = Fptr->next;
                    }
                    ptr = ptr->next;
                }
                else{
                    ptr->next = l2;
                    l2 = NULL;
                }
	    }
	}
	return l1;
    }
}

 

下方为时间与空间之消耗

​​​​​​​Runtime: 0 ms, faster than 100.00% of C online submissions for Merge Two Sorted Lists.

Memory Usage: 6 MB, less than 99.18% of C online submissions for Merge Two Sorted Lists.

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值