算法-链表篇-leetcode21-和并俩个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]
提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
这道题有俩种解法,一种是迭代,一种是递归,,核心就是遍历俩个链表

迭代遍历比较比较直观
递归遍历注意用return作为结束
一下是俩种写法
迭代写法
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 虚拟头结点
        ListNode dummy = new ListNode(-1), p = dummy;
        ListNode p1 = l1, p2 = l2;

​```
    while (p1 != null && p2 != null) {
        // 比较 p1 和 p2 两个指针
        // 将值较小的的节点接到 p 指针
        if (p1.val > p2.val) {
            p.next = p2;
            p2 = p2.next;
        } else {
            p.next = p1;
            p1 = p1.next;
        }
        // p 指针不断前进
        p = p.next;
    }

    if (p1 != null) {
        p.next = p1;
    }

    if (p2 != null) {
        p.next = p2;
    }

    return dummy.next;
}
​```

}
递归写法
 * 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 dummy = new ListNode(0);
       ListNode newList = dummy;
       merge(list1, list2, dummy);
       return dummy.next;

   }

   void merge(ListNode list1, ListNode list2, ListNode dummy) {


​```
    if (list1 != null && list2 != null) {

        if (list1.val < list2.val) {
            dummy.next = list1;
            list1 = list1.next;
        } else {
            dummy.next = list2;
            list2 = list2.next;
        }

        System.out.println("dummy: " + dummy.val);
        dummy = dummy.next;

        merge(list1, list2, dummy);
        return;

    }

    if (list1 != null) {
        dummy.next = list1;
        System.out.println("dummy-list1: " + dummy.val);
        return;
    }

    if (list2 != null) {
        dummy.next = list2;
        System.out.println("dummy-list2: " + dummy.val);
        return;
    }

}
​```

}
posted @ 2023-03-17 16:18  小傻孩丶儿  阅读(12)  评论(0编辑  收藏  举报