合并两个排序的链表

时间:2021-01-12 04:17:02

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

给定的结点结构:

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

 我的想法是:先随便定义一个结点作为开始结点,初始状态:current和head都指向开始结点。比较list1和list2当前的值,较小的那个作为current的next结点,同时向后移动一个结点,current也向后移动一个结点。这样一直比较,直到其中一个链表走完。再将没有走完的链表剩下的第一个结点作为current的next。最后返回head的next,即去掉一开始随便定义的那个结点。

代码如下:

public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode head = new ListNode(0);
        ListNode current;

        current = head;

        while (list1 != null && list2 != null) {
            if (list1.val < list2.val) {
                current.next = list1;
                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;

        return head.next;
    }

 做完了之后,看到也有用递归的。

代码如下:

public ListNode Merge(ListNode list1,ListNode list2) {
       if(list1 == null){
           return list2;
       }
       if(list2 == null){
           return list1;
       }
       if(list1.val <= list2.val){
           list1.next = Merge(list1.next, list2);
           return list1;
       }else{
           list2.next = Merge(list1, list2.next);
           return list2;
       }       
 }