题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
解题思路:
我们可以使用迭代法来解决此问题。
- 定义一个返回结果的链表res和辅助指针cur,让cur=res。
- 然后依次比较l1和l2的val值,如果l1.val<=l2.val
则让cur.next= l1;否则cur.next= l2. - 然后依次移动l1或者l2的指针以及cur的指针。
- 结束循环之后还要考虑如果l1和l2其中一个不为空,则继续让cur.next指向它。最后返回刚开始定义的res。
解题代码:
/**
* 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 l1, ListNode l2) {
//1.定义返回结果的链表
ListNode res = new ListNode();
//2.让一个指针指向res
ListNode cur=res;
//3.遍历如果有一个链表为空则结束遍历
while (l1!=null&&l2!=null){
//4.如果l1的值小于等于l2,则让cur指向l1,并且让移动指针到l1的下一个节点
if(l1.val<=l2.val){
cur.next=l1;
l1=l1.next;
}else{
//4.如果l1的值大于l2,则让cur指向l2,并且让移动指针到l2的下一个节点
cur.next=l2;
l2=l2.next;
}
//cur也要移动指针
cur=cur.next;
}
//5.遍历结束后,还要考虑如果l1为空,则让cur指向l2,否则指向l1
if(l1==null){
cur.next=l2;
}
if(l2==null){
cur.next=l1;
}
return res.next;
}
}