题目
这道题是链表的简单应用,将两个有序链表合成一个有序链表。
思路是:表一,表二各取两个对象,分别指向current和next,进行交叉比较排序。
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //判断三种null情况 if(l1==null && l2==null) return l1; if(l1==null && l2!=null) return l2; if(l1!=null && l2==null) return l1; //定义头指针 if(l1.val<=l2.val){ //分别对l1和l2取当前和下一节点指针 ListNode first=l1; ListNode second=l1.next; ListNode l2_temp=l2; ListNode l2_second=l2.next; //l2插向l1 while(l2_temp!=null){ if(second!=null){ if(l2_temp.val>=first.val && l2_temp.val<=second.val){ first.next=l2_temp; l2_temp.next=second; first=first.next; second=first.next; //这个try catch是指当l2_second=null时,l2_second.next是空指针,这时已经排序结束,所以return try{ l2_temp=l2_second; l2_second=l2_second.next;} catch (Exception e){ return l1; } } else{ first=first.next; second=first.next; }} else{ first.next=l2_temp; return l1; } } return l1; } else{ ListNode first=l2; ListNode second=l2.next; ListNode l1_temp=l1; ListNode l1_second=l1.next; while(l1_temp!=null){ if(second!=null){ if(l1_temp.val>=first.val && l1_temp.val<=second.val){ first.next=l1_temp; l1_temp.next=second; first=first.next; second=first.next; try{ l1_temp=l1_second; l1_second=l1_second.next;} catch (Exception e){ return l2; } } else{ first=first.next; second=first.next; }} else{ first.next=l1_temp; return l2; } } return l2; } } }
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/