打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LeetCode 21. 合并两个有序链表(C#实现)——链表,递归,迭代

一、问题

https://leetcode-cn.com/problems/merge-two-sorted-lists/

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4

二、GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/MergeTwoListsClass.cs

  Blog:https://www.cnblogs.com/zxxxx/

三、思路
  1、递归:判断两个链表的头元素大小,递归的决定下一个添加进结果的值

  2、迭代:设定哨兵节点head,维护一个prev指针,每次迭代都是调整prev的next指针,判断两个链表头元素大小,将小的值接入prev节点后面,同时将接入的链表和prev后移

四、代码实现

 1     public class MergeTwoListsClass 2     { 3         public class ListNode 4         { 5             public int val; 6             public ListNode next; 7             public ListNode(int x) { val = x; } 8         } 9 10         /// <summary>11         /// 递归12         /// </summary>13         /// <param name="l1"></param>14         /// <param name="l2"></param>15         /// <returns></returns>16         public ListNode MergeTwoLists(ListNode l1, ListNode l2)17         {18             if (l1 == null) return l2;19             else if (l2 == null) return l1;20             else if (l1.val < l2.val)21             {22                 l1.next = MergeTwoLists(l1.next, l2);23                 return l1;24             }25             else26             {27                 l2.next = MergeTwoLists(l2.next, l1);   28                 return l2;29             }30         }31 32         /// <summary>33         /// 迭代34         /// </summary>35         /// <param name="l1"></param>36         /// <param name="l2"></param>37         /// <returns></returns>38         public ListNode MergeTwoLists2(ListNode l1, ListNode l2)39         {40             var head = new ListNode(-1);41             var prev = head;42             while (l1 != null && l2 != null)43             {44                 if (l1.val < l2.val)45                 {46                     prev.next = l1;47                     l1 = l1.next;48                 }49                 else50                 {51                     prev.next = l2;52                     l2 = l2.next;53                 }54                 prev = prev.next;55             }56             prev.next = l1 == null ? l2 : l1;57             return head.next;58         }59     }

 

来源:https://www.icode9.com/content-1-608901.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
删除链表中等于给定值*val*的所有节点(BAT面试题)
[leetcode] 24 Swap Nodes in Pairs(交换链表相邻结
Java之手写LinkedList改造
638,移除链表元素
Java数据结构
反转链表的多种方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服