题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
两个链表要合并,而且是有序的,用一个while循环就可以合并了。
- 新建一个链表,来存放结果
- 当链表一或者链表二不为空时,取两个链表的值,比较大小,对于较小值我们把它放入新的链表。
- 判断哪个链表不为空,把剩下的节点都加在新的链表的尾部。
测试用例
1.两个为空的链表。
2.第一个为空,第二个有数据的链表。
3.第二个有数据,第二个为空的链表。
4.两个都有数据的链表。
代码
/**
* 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) {
//定义一个l3作为合并后的结果,并且定义一个root指针来指向它
ListNode l3=new ListNode(0);
ListNode root=l3;
//当两个不同时为空时
while(l1!=null && l2!=null){
//l1的值比较大或者等于l2的值时
if(l1.val<=l2.val){
l3.next=l1;
l1=l1.next;
l3=l3.next;
}else{
l3.next=l2;
l2=l2.next;
l3=l3.next;
}
}
//如果有剩下的情况时
if(l1==null){
l3.next=l2;
}else{
l3.next=l1;
}
return root.next;
}
}
总结
这是典型的数据结构的题。
还是那个问题,l1->nextnull与l1next的区别需要注意一下。