21. Merge Two Sorted Lists 合并两个已排序的链表

题目描述已经给的十分清晰了,不再重复;

思路:(1)创建表头,用于返回合并后的新链表的用途;

        (2)创建跟踪指针:index;

        (3)然后层次分为两部分 A:管理两个已排序链表都有值的情况;

                                         B:管理当一方链表没有值的情况;

                   A当中:利用循环不断比较每次l1和l2前面的两个元素,选择较小的加入index所指向的链表节点末尾;并且,重新定位index和修改后的节点(lx)的位置;

                   B当中:将依然存在有值的链表收入index;

考虑到,在A当中,比较可能相等的情况,所以if条件关系的划分很关键,需要注意!

另外需要指出的是,这个算法用到了归并排序当中merge核心的思想,相当直接借鉴!!!

但是,区别在于,这里不能把B部分归入A部分的循环当中,因为:第一,这样带来了不必要的链表操作。第二,如果不那么做,存在是嵌入continue还是return的问题。

public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);//表头!!
        ListNode index = head;
        while(l1 != null && l2 != null)
        {
            if(l1.val < l2.val) 
              { index.next = l1;
                l1 = l1.next;
                index = index.next;
              }
            else
              {
                 index.next = l2;
                 l2 = l2.next;
                 index = index.next;
              }
        }
        if(l2 != null)
        {
            index.next = l2;
        }
        if(l1 != null)
        {
            index.next = l1;
        }
        return head.next;
    }
}

 

posted @ 2016-04-11 20:42  ProWhalen  阅读(501)  评论(0)    收藏  举报