自己解法
这个题比较简单,就是挨个比较两个链表的节点,值较小的节点放到新建的队列,然后这个指针指向后面的节点,这个题基本就是考察了链表的遍历。
还有个小技巧是,在其中一个链表为空后,可以直接把另一个链表给到temp节点的next。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode headNode = new ListNode();
ListNode temp = headNode;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
temp.next = l1;
l1 = l1.next;
} else {
temp.next = l2;
l2 = l2.next;
}
temp = temp.next;
}
temp.next = l1 == null ? l2 : l1;
return headNode.next;
}
}
官方解法
官方使用了个递归的思路,每次把较小值节点拿出来,让它的next指向后面递归生成链表,这样感觉没有迭代好理解,不过算是拓展思路吧。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
else if (l2 == null) {
return l1;
}
else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}
网友评论