①英文题目
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.
Example:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
②中文题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
③思路
就是判断大小,注意,比着比着,l1或者l2就会空掉,然后导致空指针的问题,进而报错。
④代码
1 class Solution { 2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 3 ListNode zf=null; 4 // ListNode curr=zf; 5 ListNode temp1=l1; 6 ListNode temp2=l2; 7 if(temp1==null&&temp2!=null){ 8 zf=temp2; 9 temp2=temp2.next; 10 } 11 if(temp1!=null&&temp2==null){ 12 zf=temp1; 13 temp1=temp1.next; 14 } 15 if(temp1!=null&&temp2!=null){ 16 if(temp1.val<temp2.val){ 17 zf=temp1; 18 temp1=temp1.next; 19 } 20 else{ 21 zf=temp2; 22 temp2=temp2.next; 23 } 24 } //到此,zf是最小的结点,也是头部。 25 ListNode curr=zf; 26 while(temp1!=null||temp2!=null){ 27 if(temp1==null&&temp2!=null){ 28 curr.next=temp2; 29 temp2=temp2.next; 30 curr=curr.next; 31 } 32 if(temp2==null&&temp1!=null){ 33 curr.next=temp1; 34 temp1=temp1.next; 35 curr=curr.next; 36 } 37 if(temp1!=null&&temp2!=null&&temp1.val<temp2.val){ 38 curr.next=temp1; 39 temp1=temp1.next; 40 curr=curr.next; 41 } 42 if(temp1!=null&&temp2!=null&&temp1.val>=temp2.val){ 43 curr.next=temp2; 44 temp2=temp2.next; 45 curr=curr.next; 46 } 47 } 48 return zf; 49 } 50 }
⑤学到的知识
1、如果超时,那去考虑是不是while()的括号里写的表达式,一直跳不出while循环。
2、DriverSolution__.__helper__这种报错,是空指针。一般就是某个链表已经到链尾了,代码还在找它的next,从而导致空指针。