leecode 22.合併兩個有序的鏈表

題目描述

在這裏插入圖片描述

基本思路

迭代

創建一個新鏈表,只含有頭結點head,然後使用指針對兩個鏈表進行遍歷,較小的鏈表元素加入到新鏈表的末尾,當其中一個鏈表爲空時,另外一個鏈表順序加入新鏈表

public ListNode MergeTwoLists(ListNode l1, ListNode l2) 
{        
   //創建一個新鏈表
   var head = new ListNode(0);            
   //遍歷過程中新鏈表的最後一個節點            
   var currentNode = head;            
   while (l1 != null && l2 != null)            
   {                
       if (l1.val < l2.val)           
            {
            //添加l1的頭元素                  
              currentNode.next = l1;                    
            //移除l1的頭元素  
              l1 = l1.next;                
            }
       else
       {
            currentNode.next=l2;
            l2=l2.next;
       }
       //更新結果鏈表的最後一個節點                
       currentNode = currentNode.next;
    }
    if (l1 == null)            
    {              
      currentNode.next = l2;            
    }
    else            
    {           
         currentNode.next = l1;           
    }
    return head.next;
}
       

在這裏插入圖片描述

遞歸

首先,當一個鏈表爲空是,返回另外一個鏈表,比較頭元素的大小,然後遞歸決定下一個添加到結果中的值

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode MergeTwoLists(ListNode l1, ListNode l2) {
        if (l1==null)
        return l2;
        if (l2==null)
        return l1;
        if(l1.val<l2.val)
        {
        //l1的後面部分l1.next,遞歸決定l1後面的元素是什麼
            l1.next=MergeTwoLists(l1.next,l2);
            return l1;
        }
        else
        {
            l2.next=MergeTwoLists(l1,l2.next);
            return l2;
        }
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章