【LeetCode從零單排】No21.MergeTwoSortedLists
題目
這道題是連結串列的簡單應用,將兩個有序連結串列合成一個有序連結串列。
思路是:表一,表二各取兩個物件,分別指向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
******************************************/
相關文章
- 【LeetCode從零單排】No38.CountAndSayLeetCode
- 【LeetCode從零單排】No.7 Reverse IntegerLeetCode
- 【LeetCode從零單排】No20.ValidParenthesesLeetCode
- 【LeetCode從零單排】No19.RemoveNthNodeFromEndofListLeetCodeREM
- 【LeetCode從零單排】No27.Remove ElementLeetCodeREM
- 【LeetCode從零單排】No28 Implement strStr()LeetCode
- 【LeetCode從零單排】No22.Generate ParenthesesLeetCode
- 【LeetCode從零單排】No58.Length of Last WordLeetCodeAST
- 【LeetCode從零單排】No67.AddBinaryLeetCode
- 【LeetCode從零單排】No70.ClimbingStairsLeetCodeAI
- 【LeetCode從零單排】No.9 Palindrome NumberLeetCode
- 【LeetCode從零單排】No14.LongestCommonPrefixLeetCode
- 【LeetCode從零單排】No36 Valid SudokuLeetCode
- 【LeetCode從零單排】No221.Maximal SquareLeetCode
- 【LeetCode從零單排】No15 3SumLeetCode
- 【LeetCode從零單排】No189 .Rotate ArrayLeetCode
- 【LeetCode從零單排】No88.Merge Sorted ArrayLeetCode
- Mysql從零單排-1MySql
- 【LeetCode從零單排】No96 Unique Binary Search TreesLeetCode
- 【LeetCode從零單排】No112 Path SumLeetCode
- 【LeetCode從零單排】No.169 Majority Element(hashmap用法)LeetCodeHashMap
- 【LeetCode從零單排】No83 Remove Duplicates from Sorted ListLeetCodeREM
- 【LeetCode從零單排】No26.Remove Duplicates from Sorted ArrayLeetCodeREM
- 從零單排學Redis【白銀】Redis
- 【LeetCode從零單排】No 3 Longest Substring Without Repeating CharactersLeetCode
- 【LeetCode從零單排】No129 Sum Root to Leaf NumbersLeetCode
- 【LeetCode從零單排】No.160 Intersection of Two Linked ListsLeetCode
- 從零單排學Redis【黃金】Redis
- 【LeetCode從零單排】No121 Best Time to Buy and Sell StockLeetCode
- 【LeetCode從零單排】No118 Pascal's TriangleLeetCode
- 【LeetCode從零單排】No104 Maximum Depth of Binary TreeLeetCode
- 【LeetCode從零單排】No 114 Flatten Binary Tree to Linked ListLeetCode
- 【LeetCode從零單排】No 191.Number of 1 Bits(考察位運算)LeetCode
- 從零單排學Redis【鉑金二】Redis
- 從零單排學Redis【鉑金一】Redis
- 【LeetCode從零單排】No102 Binary Tree Level Order TraversalLeetCode
- 【LeetCode從零單排】No.135Candy(雙向動態規劃)LeetCode動態規劃
- 「從零單排canal 07」 parser模組原始碼解析原始碼