剑指 Offer —16—合并两个排序的链表

来源:互联网 发布:wto国际贸易统计数据库 编辑:程序博客网 时间:2024/05/29 16:43

合并两个排序的链表 : 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

  • 注意点: 注意异常情况

    • 链表为空
  • 思路:

    • 循环:新建一个链表,保存比较后的值

    • 递归:注意终止条件,返回值

// 循环版本package A16合并两个排序的链表;public class Solution {    public class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }    }    public ListNode Merge(ListNode list1, ListNode list2) {        // 循环版本        if (list1 == null && list2 == null) {            return null;        }        if (list1 == null) {            return list2;        }        if (list2 == null) {            return list1;        }        ListNode listNode = null;// 首节点        if (list1.val < list2.val) {            listNode = list1;            list1 = list1.next;        } else {            listNode = list2;            list2 = list2.next;        }        // listNode = (list1.val <= list2.val) ? list1 : list2;        // 1,2,3,4        ListNode temp = listNode; // 向下移动        while (list1 != null && list2 != null) {   // 注意 不能是list1.next != null  否则最后一个遍历不到            if (list1.val <= list2.val) {                temp.next = list1;                temp = temp.next;                list1 = list1.next;            } else {                temp.next = list2;                temp = temp.next;                list2 = list2.next;            }        }        if (list1 != null) {            temp.next = list1;        }        if (list2 != null) {            temp.next = list2;        }        return listNode;    }}
// 递归版本package A16合并两个排序的链表;public class Solution1 {    public class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }    }    public ListNode Merge(ListNode list1, ListNode list2) {        if (list1 == null && list2 == null) {            return null;        }        if (list1 == null) {            return list2;        }        if (list2 == null) {            return list1;        }        ListNode root = null;        if (list1.val <= list2.val) {            root = list1;            root.next = Merge(list1.next, list2);        }else{            root = list2;            root.next = Merge(list1, list2.next);        }        return root;    }}
阅读全文
0 0