题目要求:
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
问题分析:
这道题很容易理解,就是将两个链表遍历一遍,将当前结点的值进行比较,可以看作类似双指针的思想,那个值比较小,连接到新链表以后就指针向后移动一位,因为链表是有序的,所以也不用考虑排序的问题。因为题目中给定两个链表都是有序的,所以我们可以将新链表的头结点的值指定为0或者一个负数,最后返回新链表头结点的next就可以。
解题代码:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//使用一个虚结点来作为新链表的头结点
ListNode head = new ListNode(0);
//头结点不能动,创建临时结点指向头结点
ListNode temp = head;
//l1和l2都不为空
while(l1 != null && l2 != null){
if(l1.val < l2.val){
//如果l1当前结点的值小于l2
temp.next = l1;
l1 = l1.next;
} else {
//如果l2当前结点的值小于l1
temp.next = l2;
l2 = l2.next;
}
//新链表向下走一个结点
temp = temp.next;
}
//由于两个链表长度相同,所以肯定有一个链表先遍历结束
//将剩下的链表直接连接到末尾即可
temp.next = l1 != null?l1:l2;
return head.next;
}
}