题目:合并两个有序链表
题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
实例展示:
示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例2: 输入:l1 = [], l2 = [] 输出:[]
思路分析:
1.初始化一个列表做为我们最后的返回项
2.定义一个current指针指向我们当前记录的数字(不直接用result是因为当不断遍历数字时指针后移,最后返回结果时会损失部分数字)
3.一次次筛选,所以需要用到while循环,while循环成立的条件:list1和list2不为空
循环体内就是比较数字大小,这里比较出一个较小值后需更新current指针指向的对象
4.最后判断是否遍历结束,即list1和list2有没有空
这里主要采用迭代法实现,当然也可以采用递归调用
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//初始化列表
ListNode result = new ListNode(0);
//指向当前result位置
ListNode current = result;
while(list1 != null && list2 != null){
if(list1.val < list2.val){
current.next = list1;
//更新current指向的位置
current = current.next;
list1 = list1.next;
}else{
current.next = list2;
current = current.next;
list2 = list2.next;
}
}
if(list1 == null){
current.next = list2;
}else{
current.next = list1;
}
//首位置不放元素,因此指向next
return result.next;
}
}