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;
        }
    }
}

在这里插入图片描述

发布了47 篇原创文章 · 获赞 5 · 访问量 1893

猜你喜欢

转载自blog.csdn.net/Pang_ling/article/details/104905581