所有类都是引用类型。
类是某一批对象的抽象。
1 [修饰符] class 类名{
2 零到多个构造器定义
3 零到多个成员变量
4 零到多个方法
5 }
对于一个类定义而言,可以包含三种最常见的成员:构造器、成员变量、方法
1 [修饰符] 类型 成员变量名 [= 默认值];
1 [修饰符] 方法返回值类型 方法名(形参列表){
2 //方法体
3 }
1 [修饰符] 构造器名(形参列表){
2 //构造执行体
3 }
Java 的对象有两个作用:
PS:如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须用this前缀。
题目:21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode(int x) { val = x; }
7 * }
8 */
9 class Solution {
10 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
11 ListNode list = null;
12 if(l1 ==null && l2 == null){
13 return list;
14 }else if (l1 == null){
15 list = new ListNode(l2.val);
16 l2 = l2.next;
17 }else if(l2 == null){
18 list = new ListNode(l1.val);
19 l1 = l1.next;
20 }else{
21 if(l1.val > l2.val){
22 list = new ListNode(l2.val);
23 l2 = l2.next;
24 }else{
25 list = new ListNode(l1.val);
26 l1 = l1.next;
27 }
28 }
29 ListNode tmp = list;
30 while(l1 != null || l2 != null){
31 if(l1 == null){
32 tmp.next = new ListNode(l2.val);
33 tmp = tmp.next;
34 l2 = l2.next;
35 }else if(l2 == null){
36 tmp.next = new ListNode(l1.val);
37 tmp = tmp.next;
38 l1 = l1.next;
39 }else{
40 if(l1.val < l2.val){
41 tmp.next = new ListNode(l1.val);
42 tmp = tmp.next;
43 l1 = l1.next;
44 }else{
45 tmp.next = new ListNode(l2.val);
46 tmp = tmp.next;
47 l2 = l2.next;
48 }
49 }
50
51 }
52 return list;
53 }
54 }
这是第一次接触链表,第一步设置表头的时候有点笨拙,看到评论中的设置 dummyHead ,最后输出 dummyHead.next 的方法,可以使代码更简洁一点,但实际性能应该差不多,这道题我的答案执行用时 2 ms。另外还有另一种方案是将两个链表的节点重新串起来,这样耗费的内存会更小,速度也更快,缺点是原本的两条链表会被破坏,不能再次使用了。