木又连续日更第46天(46/100)
木又的第98篇leetcode解题报告
链表
类型第1篇解题报告
leetcode第21题:合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists
【题目】
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
【思路】
本题较为简单,遍历两个链表,比较元素大小,将较小的元素依次插入新的链表中。注意的是,退出循环时,有一个链表还没有遍历完所有元素。
【代码】
python版本
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
l = ListNode(0)
head = l
node1 = l1
node2 = l2
while node1 and node2:
l.next = ListNode(0)
l = l.next
if node1.val <= node2.val:
l.val = node1.val
node1 = node1.next
else:
l.val = node2.val
node2 = node2.next
while node1:
l.next = ListNode(0)
l = l.next
l.val = node1.val
node1 = node1.next
while node2:
l.next = ListNode(0)
l = l.next
l.val = node2.val
node2 = node2.next
return head.next
C++版本
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* node1 = l1;
ListNode* node2 = l2;
ListNode* l = new ListNode(0);
ListNode* head = l;
while(node1 && node2){
l->next = new ListNode(0);
l = l->next;
if(node1->val <= node2->val){
l->val = node1->val;
node1 = node1->next;
}else{
l->val = node2->val;
node2 = node2->next;
}
}
while(node1){
l->next = new ListNode(0);
l = l->next;
l->val = node1->val;
node1 = node1->next;
}
while(node2){
l->next = new ListNode(0);
l = l->next;
l->val = node2->val;
node2 = node2->next;
}
return head->next;
}
};
前一篇文章:T97-长按键入
给我好看
本文分享自微信公众号 - 木又AI帮(gh_eaa31cab4b91)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4581374/blog/4593458