Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
http://oj.leetcode.com/problems/merge-two-sorted-lists/
Solution:
Since the two lists are sorted, we can compare the two heads and add the smaller one to the new list, then move the next node. The algorithm is obviously and is part of the merge sort.
https://github.com/starcroce/leetcode/blob/master/merge_two_sorted_lists.cpp
// 48 ms for 208 test cases
// Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
/**
* 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) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(l1 == NULL) {
return l2;
}
if(l2 == NULL) {
return l1;
}
ListNode *head = new ListNode(-1);
ListNode *p = head;
while(l1 != NULL && l2 != NULL) {
if(l1->val < l2->val) {
p->next = l1;
l1 = l1->next;
p = p->next;
}
else {
p->next = l2;
l2 = l2->next;
p = p->next;
}
}
// if there is some remaining list
if(l1 != NULL) {
p->next = l1;
}
if(l2 != NULL) {
p->next = l2;
}
return head->next;
}
}
本文介绍了一种高效算法,用于合并两个已排序的链表,并通过实例展示了实现过程。算法遵循合并排序的基本思想,通过比较链表头节点的值,将较小的节点添加到新链表中,直到所有节点都被合并完成。
1477

被折叠的 条评论
为什么被折叠?



