将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
一开始的思路是不停的创建新的节点,放入值,运行发现时间只超过了60%的人,后来发现两个原链表可以破坏掉,虽然不太好,万一想要原来链表的信息就不再有了,修改后直接做节点的搬运工,直接上代码。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode temp = new ListNode(0);
temp.next = null;
ListNode a = l1;
ListNode b = l2;
ListNode c = temp;
ListNode d = temp;
//两个链表都没有空,比较大小然后将节点拿下来拼接起来;
while(a!=null&&b!=null){
if(a.val>=b.val){
d = b;
b = b.next;
}else{
d = a;
a = a.next;
}
d.next = temp.next;
temp.next = d;
temp = temp.next;
}
if(a!=null){
temp.next = a;
}else if(b!=null){
temp.next = b;
}else{
return c.next;
}
return c.next;
}
}
运行结果:
可以发现在内存方面还有进步空间,再想想。