合并两个排序的链表(思路和实现)

KLQ 2020-05-06 17:21:18 java常见问答 10238

下面要给大家分享的是和合并两个排序的链表相关的内容,一起来看看具体的思路和实现方式吧。

题目:

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

思路1:

合并两个排序的链表

代码实现:

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

思路2:

递归版本

代码实现:

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;
       }       
   }

思路3:

非递归版本

代码实现:

if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }
        ListNode mergeHead = null;
        ListNode current = null;     
        while(list1!=null && list2!=null){
            if(list1.val <= list2.val){
                if(mergeHead == null){
                   mergeHead = current = list1;
                }else{
                   current.next = list1;
                   current = current.next;
                }
                list1 = list1.next;
            }else{
                if(mergeHead == null){
                   mergeHead = current = list2;
                }else{
                   current.next = list2;
                   current = current.next;
                }
                list2 = list2.next;
            }
        }
        if(list1 == null){
            current.next = list2;
        }else{
            current.next = list1;
        }
        return mergeHead;

想要了解更多的java实例,就请继续的关注我们吧!更多的java实例可以分享给大家呢。

推荐阅读:

复杂链表的复制,Java实现及思路

将二叉搜索树转换成双向链表(实现及思路)

找出两个链表的第一个公共结点,Java实现和思路