美文网首页
合并两个有序链表

合并两个有序链表

作者: chengcongyue | 来源:发表于2019-04-12 18:45 被阅读0次

    题目

    有两个有序的链表,保证合并完之后依然有序,然后返回链表的头结点.
    例子如下:
    链表1:1->3->5->7->null
    链表2:2->4->6->null
    合并之后1->2->3->4->5->6->7->null
    分析
    我们来想想到底需要几个变量,想我们以前实现过的逆序单链表,我们需要用到pre来记录上一个结点,一开始默认为null,然后我们又定义了next,用来保留现场,对于这道题,我们首先想的应该是找到一个基准链表,然后不断的想这个基准链表中插值,经过分析之后,我们选定了要使用链表1作为基准链表(是针对于上面的例子来说的),我们需要找到头结点最小的作为基准链表.
    现在我们的第一个问题解决了,然后我们来想一下,到底该如何完成操作那,其中肯定要需要插入操作的,由此我们要想到使用一个pre来保存插入位置之前的那个值,当然这个值,肯定是一直出现在基准链表上,也就是cur1(使用题目的例子来说).然后就是next变量,就像逆序单链表似的,我们来保留下面一个结点,这个结点肯定是cur2上的,也就是这个链表的结点一直一直的进入基准链表.
    next的变量在链表的操作中一直是出现的,不止针对于这一道题.
    根据上面的分析我们大概能写出大概的问题了:

    while()
    {
           if(cur1.value<cur2.value)
           {
                    pre=cur1;
                    cur1=cur1.next;
           }
           else{
                   next=cur2.next;
                   pre.next=cur2;
                   cur2.next=cur1;
                   pre=cur2;
                   cur2=next;
          }
    }
    

    然后再将我们提出的第一个问题解决,整个代码如下:

    public static Node mergeTwoList(Node head1,Node head2)
        {
            if(head1==null||head2==null)
            {
                return head1!=null?head1:head2==null?null:head2;
            }
        
            Node cur1=head1.value<head2.value?head1:head2;
            Node cur2=head1==cur1?head2:head1;
            Node tmp=cur1;
            Node pre=null;
            Node next=null;
            while(cur1!=null&&cur2!=null)
            {
                if(cur1.value<cur2.value)
                {
                    pre=cur1;
                    cur1=cur1.next;
                }else //
                {
                    next=cur2.next;
                    cur2.next=cur1;
                    pre.next=cur2;
                    pre=cur2;
                    cur2=next;
                }
            }
            if(cur1==null)
            {
                pre.next=cur2;
            }
            return tmp;
        }
    

    相关文章

      网友评论

          本文标题:合并两个有序链表

          本文链接:https://www.haomeiwen.com/subject/nodhwqtx.html