其实再次回想起来做,就明白linked list为什么是这种写法:

  1. head.next, cur.next: 新创建的节点cur, next都是值为0的节点,e.g. cur往后移动生成了这个linked list, 所以最后是返回head.xxx;
  2. 顺着linked list移动的过程中,因为每个node实际上本来就只有valuenext指针两个东西,如果不是new ListNode(x), 那么就只用管next来创建这整个linked list;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode cur = new ListNode(0), head = cur;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
cur.next = l1;
l1 = l1.next;
} else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
cur.next = (l1 == null) ? l2 : l1;
return head.next;
}
}