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.
最初思路是创建第三个linkedlist, 然后按顺序由小到大将两个给定的linkedlist节点值放入第三个linkedlist中. 虽然肉眼运行毫无破绽, 可是提交运行一直报错. 无奈之下只能对比一下网上做法, 发现细节是完全一致的, 差别在于:
1. 创建的第三个list node应该只是一个fake node, 返回的是这个fake node的next
2. 创建的第三个linkedlist无需自己创建每一个节点, 而是用fake node指向所需要的节点(给定的就两个linkedlist中).
更改了这两点之后提交通过...
其他的处理过程包括:
对比两个给定linkedlist的两个当前节点, 新建的linkedlist指向值较小的节点, 然后被指的linkedlist指向其next, 新建的linkedlist指向其next.
如果其中一个给定的linkedlist已经全部比较完, 则将另一个给定的了linkedlist余下的节点全部接到新建linkedlist中.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// exception cases
if (l1 == null && l2 == null) return null;
if (l1 == null) return l2;
if (l2 == null) return l1;
// new list node3
ListNode l3 = new ListNode(0); // initial value (0) is necessary
ListNode header = l3; // mark down the header of new linked list
while(l1!=null && l2!=null){
if(l1.val <= l2.val){
l3.next = l1;
l1 = l1.next;
}
else {
l3.next = l2;
l2 = l2.next;
}
l3 = l3.next;
}
if (l1 == null) l3.next = l2;
else l3.next = l1;
return header.next;
}
}