Algorithm

LeetCode 21: 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:

1
2
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路

最近周围好几个同学在面试某厂时都碰到这道题,虽然简单但要在规定时间内跑通还是对细节有点要求的。思路比较简单就直接写解答吧。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)), *p = head;
while (l1 && l2) {
if (l1->val < l2->val) {
p->next = l1;
l1 = l1->next;
} else {
p->next = l2;
l2 = l2->next;
}
p = p->next;
}

p->next = (l1 == NULL) ? l2 : l1;

return head->next;
}

Review

The MVVM Pattern

本文出自微软,介绍了使用 MVVM 设计模式的动机,MVVM 是什么及其优势有哪些。

MVVM 提供分离的概念,将应用的逻辑与视图清晰的分开有助于测试和维护,并使代码更易复用。数据的绑定为 ViewViewModel之间提供了联系。同时它让开发设计工作流测试更加容易。

MVVM 的三个核心组成分别为:modelviewviewModel ,文中将三者的作用及相互间的交互模式介绍的比较清晰。其中viewModel可视作viewmodel的中间人。

最后文中罗列了使用 MVVM 的优势有哪些,虽然 Windows Phone 已离我们远去,但毕竟 MVVM 是在微软诞生的,本文还是值得一看。

另外,与 iOS 中由 MVC 演化而来的 MVVM 还是有些区别的。

Tip

本周主要在处理业务代码,未能总结到 Tip ,惭愧惭愧。

Share

5 Things to Know About Reactive Programming

本文从五个方面介绍了理解响应式编程的要点,并用最流行的相应式框架 Rx 进行举例说明。

响应式编程的核心是处理异步的数据流,数据流可分为“冷”和“热”两种,理解两者的区别十分重要。另外对异步的理解和代码的简洁和可读性的重视也是应该考虑的。最后文章梳理了响应式编程响应式系统的区别。